シェルスクリプト総合 その30

■ このスレッドは過去ログ倉庫に格納されています
2019/07/01(月) 23:04:27.02ID:/rKj5XUf
シェルスクリプトに関する総合スレッドです。

全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。

前スレ:
シェルスクリプト総合 その29
https://mevius.5ch.net/test/read.cgi/tech/1537540487/
2019/07/03(水) 15:22:43.46ID:k7t42OM8
無限ループに条件つけて終了させればいい
どの言語でも一緒
2019/07/03(水) 15:25:15.83ID:R/PdF9TQ
>>101
ハゲは一人だ
2019/07/03(水) 16:12:30.34ID:jC/WE6MC
あー、シェルが勝手に阻止してくれるワケではないのですね...

#! /bin/sh
echo "foo!"
bash hoge.sh
これ無限ループになりました。
2019/07/03(水) 18:44:48.49ID:sXMtau7O
>>103
誰も気づいていないみたいだよw
2019/07/03(水) 19:21:20.61ID:v/5AoTKN
hoge、fuga、piyoは認めるがhageは認めんぞ
俺が禿げているって訳じゃないぞ本当だからな
107デフォルトの名無しさん
垢版 |
2019/07/03(水) 19:25:37.57ID:XEr4jr+a
うるせーハゲ
2019/07/03(水) 19:49:42.97ID:pKA2Nnt3
             )ソ)
          ッλ ノ(.,ノ)
         (゙- ..::.::. . (
        (ソ.  .彡⌒ミ. )ソ)
        ).::'; (´・ω・`) ス (
       ソ .::;';'(つ ⊂)::;';'`〜、.
       (  :;';' |__∧_| ::;';'  ヽ)
`'~`'''`'`'`~'~~`~~'`'`''''"`'`'`''`''''"`'``'~`''`'~`'''`'`'`~
 さ あ 禿 げ 上 が っ て ま い り ま し た
109デフォルトの名無しさん
垢版 |
2019/07/03(水) 21:40:00.18ID:ehEf7ymj
禿ーゲンダッツ
2019/07/03(水) 22:05:25.84ID:t0CPqQzZ
>>101
$SHLVL変数で判定するんじゃないの?
2019/07/03(水) 23:07:21.62ID:t0CPqQzZ
……と思ったらhogeとhageかよw
クッソwww紛らわしいメタ変数使うなw
普通hogeの次はfugaだろーがよ
2019/07/04(木) 03:34:12.16ID:KpaWo1Ff
commandって便利やな。
シェルスクリプトでオーバーライドができちゃうよ
2019/07/04(木) 07:10:15.99ID:vxwYTSOB
>>112
ls () {
command -p ls
}
↑こういうやつなw
2019/07/04(木) 09:07:36.04ID:BLb3ulq0
command て.... ググラビリティ低すぎでしょ
2019/07/04(木) 09:37:41.63ID:vxwYTSOB
>>114
いやもっとググビティ低いのでmanとかありますし……。
あとcatもかな?make・niceあたりも引っ掛かりにくい。
でもまあ関連語句と一緒に検索すればノイズはほぼ無くなるけどね。
2019/07/04(木) 10:08:16.55ID:846uO/vY
less より vi(/= vim) が軽いので
ページャーとしてパイプの最後に less するのとりかえる
2019/07/04(木) 10:50:19.43ID:8CMbGrkR
シェルスクリプトで、実行結果にかかわらず終了コード0を先出しする書き方ってないでしょうか。

背景としては…
openvpnのServer側で、「clientが接続してきたらコマンドを実行」できるんですが、
そのコマンドの終了コードが0でないと以降の処理が進まず、接続が確立されないようなんです。
今回コマンドの目的は「SSHでclientにコマンドを送り込むスクリプト」なので、
コマンドの実行結果なんか見ないで先に接続を確立してくれないと、送り込みようがないです。

なのでopenvpn側には、スクリプトの結果にかかわらず終了コード0を先に返しておいて、
sleepを入れるなり何なりして後からSSHでコマンドを送り込みたいんですが、
/path/to/script.sh && true とか色々試してみるも、一向にスクリプト終了と見なしてもらえません。

何か方法はないでしょうか。
2019/07/04(木) 10:58:34.54ID:vxwYTSOB
/path/to/script.sh; true
これじゃあかんの?
2019/07/04(木) 11:41:34.07ID:97ll0bAQ
catとtac
lsとsl
moreとless
nanoとmicro
headとtail
こいつらみたいな言葉遊びって他にもある?
大抵は既存コマンドの改良版が対にされやすいよな
2019/07/04(木) 11:54:20.16ID:VX27EPul
>>117
/path/to/script.sh & true
script.shをバックグラウンドで実行でいいんじゃないの
2019/07/04(木) 12:16:55.68ID:KpaWo1Ff
>>117
終了コードを先出しするの意味がわからんが、
まあ中断しないようにしたいということだとして。

まず途中で中断するのは set -e されてるから
set -e されてる状態だとコマンドの終了コードが0以外だとそこで中断されてしまう。

中断されなくする一番簡単な方法は

hige ||: ・・・終了コードが0以外でも中断せず、かつ終了コードを0にする
hige &&: ・・・終了コードが0以外でも中断せず、かつ終了コードはそのまま保持する

あと、if hige; then 〜 みたいに if や while の中に入れてもOK
if や while は、コマンドの終了コードを条件に処理を分岐するので
これらの中に入れても中断しなくなる。
2019/07/04(木) 12:22:58.60ID:KpaWo1Ff
>>117
どうでもいいけどさ、openvpnの機能で
たしか接続時にスクリプト実行する機能がなかったか?
2019/07/04(木) 12:29:18.19ID:vxwYTSOB
>>119
yacc→bison
cat→dog
make→kati (https://git.io/fj6cL)
124117
垢版 |
2019/07/04(木) 14:12:34.15ID:8CMbGrkR
>>118,120
;も&もダメでした。

>>121
ちょっと理解し切れてるかわかりませんが、
;や&の代わりに||を試しても、同じ結果でした。

>>122
その接続時スクリプト実行機能で、自作スクリプトを実行しようとしているが、
自作スクリプトのexitcode 0を確認しない限り接続が確立されないので、
接続できている前提の自作スクリプトがうまく動かない、という話です。

その後、試行錯誤してうまくいったんですが、
・openvpnの接続時スクリプト1は、別のスクリプト2を&付きで実行してすぐexit 0で終了
・別のスクリプトにやりたい処理を記述、終わったらexit 0
こういう方法でした。
2019/07/04(木) 14:21:40.05ID:vxwYTSOB
今さらだけどPOSIXでpushdとかって「未定義」なんだな。
つまりこれらの字句が来たとき、pushdコマンドが実行されるかもしれないと想定しなきゃいけない。
126デフォルトの名無しさん
垢版 |
2019/07/04(木) 14:44:38.64ID:VFVr1rb1
>>124
これは?

/path/to/script.sh ; exit 0
2019/07/04(木) 18:16:12.18ID:KBMDzr/H
俺には >>120>>124 でうまくいった方法が同じに思えるのだが何が違ったのだろう...
2019/07/04(木) 18:44:40.09ID:Nr3czBjG
>>119
more most
nano pico
perl ruby
129117
垢版 |
2019/07/04(木) 18:54:04.40ID:8CMbGrkR
>>126
明日試してみます

>>127
そもそもopenvpn側の判定条件がはっきりしてないので、
シェルスクリプト的には皆さんに教えてもらったのが正解でも
openvpn的にダメってだけかもしれません。
シェルスクリプト的にokならそれでokじゃないはずがない、とは思うんですが。
2019/07/04(木) 19:05:50.51ID:zzPJIhEP
>>129
openvpnの
--client-connect

--route-up
を使えばいい気がする
2019/07/04(木) 19:30:11.56ID:gP3HGmG/
>>125
もとはcshの機能だからPOSIX策定時は独自拡張だったんだろうな
POSIX準拠のシェルスクリプトではpushd,popd,dirsは使わない
2019/07/04(木) 19:39:31.79ID:VX27EPul
>>129
スクリプトではなく純粋にコマンドの実行=単に実行ファイルの実行とか
引数の解釈分解もopenvpnでやってるとかかな?であれば、
/bin/sh -c '/path/to/script.sh & true'
とかなんとか。書き方も違うかもしれない(' が必要なのか可能なのか、もしかしたらできないとか)
2019/07/05(金) 06:22:27.69ID:CMdnJVDV
POSIXユーティリティにネットワーク関連のコマンドが追加される予定ってあるの?
2019/07/05(金) 10:21:41.11ID:CMdnJVDV
>>128
perlはもともとどういう意味だったんだろうな。
2019/07/05(金) 10:39:53.85ID:7D1ht1Ch
teeの無理矢理感すき
136デフォルトの名無しさん
垢版 |
2019/07/05(金) 10:46:54.44ID:/9SntML6
>>134
確か pearl って言語が既にあったので perl にしたんだったと思った。
2019/07/06(土) 03:00:27.30ID:d8QKOOo3
>>135
そういういえばteeのパイプ版のpeeというのもあった。
2019/07/06(土) 04:11:43.20ID:O76mcSig
きたねぇな
139デフォルトの名無しさん
垢版 |
2019/07/06(土) 04:28:48.13ID:Db2rLmY3
pooとかもあるな

>>140
それはpooh
2019/07/06(土) 05:18:54.35ID:d8QKOOo3
>>139
それは「pooコマンド」があるってこと?
検索してもネットミームしか引っ掛からんw
2019/07/06(土) 10:11:41.54ID:q0MZeBYW
https://codeday.me/jp/qa/20181126/2893.html

おしっこw
2019/07/06(土) 10:27:36.00ID:Qorx3cLN
comedyday
2019/07/06(土) 14:22:39.80ID:B/itK7pP
pingは潜水艦のソナー音
2019/07/06(土) 16:53:09.35ID:p445ST1A
sosコマンドとかないのかな。
2019/07/08(月) 08:11:26.31ID:OnOhhClA
tarが入ってない環境なんてあるのかな?
2019/07/08(月) 08:54:13.07ID:ny4rr8vT
paxコマンド使って、どうぞ
2019/07/08(月) 08:56:35.94ID:uRBHZP6h
♪IN TERRA PAX〜
2019/07/08(月) 16:03:08.50ID:u+KjwOdz
>>144
sosreport ならある
2019/07/09(火) 00:44:32.67ID:hKj+lpg6
sexという天文学用のコマンドがある事実
下ネタ満載のmanもあるらしいが
2019/07/09(火) 08:05:36.87ID:DRnRn6EV
>>149
man woman
とか面白いぞ
2019/07/09(火) 08:31:28.67ID:chrBBqpb
s式の expression という意味で lisp では
sexp というワードが使われる時が sex ちらつく

シェルスクリプトじゃなくてごめん
2019/07/09(火) 10:07:15.07ID:DRnRn6EV
$ man co
https://kazmax.zpp.jp/cmd/c/co.1.html
2019/07/10(水) 13:17:47.35ID:AgLkizrd
セマンティックバージョニングの並びで最新のタグを取得するにはどうすればいいの?
sort -Vはposixにはないようなんでなしで。
gitコマンドで(最後に付けたタグではなく)最新のタグが取得できればそれでも良いんだけど
2019/07/10(水) 13:29:47.61ID:eZpAq1ko
>>153
試してないけどsortの区切りオプションを“.”にして
各桁を数字順に並び換えたら上手いこといきそう。
2019/07/10(水) 13:46:00.77ID:AgLkizrd
1桁目を並び替えて、それから2桁を並び替えて、それから3桁目を並び替えるってできるんかいな?

できたとしても、1.0.0 よりも 1.0.0-alpha は小さくなって、
1.0.0-alpha と 1.0.0-beta はASCII順で後者のほうが後で、
1.0.0-alpha と 1.0.0-alpha+20190710 は順番が同じなんていうルールが有るわけだけど
2019/07/10(水) 15:06:48.80ID:StxWbt+s
できたとしても以後がえぐい
2019/07/10(水) 16:09:18.81ID:eZpAq1ko
素直にsort -V使うのが一番。
POSIXに準拠したければそれなりの実力がないとね。
少なくとも俺には無理w ていうかわざわざ既にある機能を苦労して再発明したくねーw
158デフォルトの名無しさん
垢版 |
2019/07/10(水) 16:15:38.61ID:6IY0QwqQ
つまりどこでも動くシェルスクリプトなんて都市伝説だよね。
159デフォルトの名無しさん
垢版 |
2019/07/10(水) 17:49:00.07ID:lDiVjXP/
世界征服して一つのシェルしか使わないように全世界の人間に強制すれば可能
2019/07/10(水) 18:31:37.23ID:8OTK1K8V
シェルだけ統一しても無理だな
2019/07/10(水) 19:54:16.62ID:eZpAq1ko
シェルスクリプトは「完全に」どこでも動くとは限らないけど
他の言語と比べて「ある程度」どこでも動く確率が高い。
2019/07/10(水) 20:10:25.56ID:8OTK1K8V
確率を言うならデータもってこいよ
どこにあるんだよその統計はw
2019/07/10(水) 20:36:18.03ID:j+J/37U2
まだやってる。堂々巡りを。四国へ行け
2019/07/10(水) 20:37:15.39ID:StxWbt+s
それいわれたのC があって perl ができる前の常識でしょ
C よりは確かに移植性ある
165デフォルトの名無しさん
垢版 |
2019/07/10(水) 20:59:14.35ID:lDiVjXP/
Windowsには最初からは入ってないよね?今のは入ってる?
まあ WSL 動かしちゃえば何でもありにはなるが。
2019/07/10(水) 20:59:47.00ID:mGyL/3Gj
そんなに難しい話じゃなくてshは多くの環境にインストールされてるってだけのことでしょ?
例えばPerlが初期インストールされてるような環境なら
必ずshもインストールされてる。
Perlが入って無くても、shはインストールされてる。
2019/07/10(水) 21:01:25.84ID:mGyL/3Gj
>>165
Windowsにはshが入ってないけど、
PerlやRubyも入ってない。
shが入ってないならば、○○も入ってないが成り立つ。
2019/07/10(水) 21:13:36.75ID:mGyL/3Gj
結局の所Windowsとそれ以外のOSに分かれるわけで、
Windowsとそれ以外のOSの両方に入ってる言語はなくて、
Windows以外のOSに入ってる言語で一番多いのはshなんだよね。
2019/07/10(水) 21:16:39.60ID:mGyL/3Gj
dockerとか使うとわかるけど、最小イメージのalpineには
perもrubyもpythonも入ってないからな
2019/07/10(水) 21:19:19.80ID:mGyL/3Gj
そういやalpineにはbashですら入ってないのな
2019/07/10(水) 21:23:57.90ID:6IdsJob5
  /\___/\
/ /    ヽ ::: \
| (●), 、(●)、 |    / ̄ ̄ ̄ ̄ ̄ ̄ ̄
|  ,,ノ(、_, )ヽ、,,   |  < まーたはじまった
|   ,;‐=‐ヽ   .:::::|    \_______
\  `ニニ´  .:::/
/`ー‐--‐‐―´´\
2019/07/10(水) 23:46:47.18ID:8OTK1K8V
要はPOSIXは必要最低限の機能しか規格化していないから出来ることには限界があるってことだ
2019/07/11(木) 04:18:38.14ID:pY8YHtW/
>>168
そうそう。こういうことなんだよ。
2019/07/11(木) 09:51:44.08ID:5BkhO8Tf
独自にcmdやpowershell持ってるしな
2019/07/11(木) 10:49:49.47ID:7babKKNu
Windowsにはshが入ってない!
→ かといってじゃあ他の言語が入っているかというと入ってない

Windowsは諦めた。それ以外で最初からOSに入っていてどこでも使える言語はなんだ?
→ sh
176デフォルトの名無しさん
垢版 |
2019/07/11(木) 11:30:36.51ID:EFuj/0Xm
どこでも動くシェルスクリプトって都市伝説だよねw
2019/07/11(木) 11:35:07.95ID:nlZoRVuP
  /\___/\
/ /    ヽ ::: \
| (●), 、(●)、 |    / ̄ ̄ ̄ ̄ ̄ ̄ ̄
|  ,,ノ(、_, )ヽ、,,   |  < まーたはじまった
|   ,;‐=‐ヽ   .:::::|    \_______
\  `ニニ´  .:::/
/`ー‐--‐‐―´´\
2019/07/11(木) 11:39:41.84ID:bvWe7WiP
Javaなら一度書けばどこでも動くのに
2019/07/11(木) 11:54:59.97ID:PMWvbDa1
まじで?
買ってきたばかりの ノートブック windows でも?
2019/07/11(木) 12:03:46.60ID:oBmxbhd/
買ってきたばかりの ノートブック windows でも
Perlなら動く!→動きません(笑)

Rubyなら? Pythonなら? C言語なら? NO!!!!
2019/07/11(木) 12:05:03.00ID:PMWvbDa1
それでも Java なら動く?
2019/07/11(木) 12:28:30.89ID:pY8YHtW/
PowerShellなら動きます(白目)
183デフォルトの名無しさん
垢版 |
2019/07/11(木) 12:29:45.46ID:W9yQmyPF
Windowsに最初から入ってるのは vbs とか js とか、あとバッチファイルとかパワーシェルかな。よく知らんけど。
HTAってのもあったっけ。
2019/07/11(木) 12:34:10.09ID:CgGarxi7
powershell考えた奴は頭おかしいんじゃね
なんでいちいちコマンドとかあんな長いんだよ
無能にもほどがある
185デフォルトの名無しさん
垢版 |
2019/07/11(木) 12:50:53.46ID:At9Pc1xn
adduserとuseraddどっちがどっちかたまに使うとき毎回調べるみたいなクソ下らないことしたくないからじゃない?
2019/07/11(木) 12:57:39.35ID:oBmxbhd/
それをいうなら、Windows、Macで、どの言語でも構わないが
ユーザーを追加する方法を調べないでわかるっていうの?
2019/07/11(木) 12:58:48.61ID:l57S3jiM
POSIXってUNIX系OSの規格なのに
なんでWindowsの話になってんだよw
2019/07/11(木) 13:00:17.64ID:A1tpN7ls
>>181
インストールしないで動くのか?
2019/07/11(木) 13:01:52.25ID:PMWvbDa1
>>188
>Javaなら一度書けばどこでも動くのに
とあったから
Windows は標準でいれてるのかなと
190デフォルトの名無しさん
垢版 |
2019/07/11(木) 13:23:31.79ID:W9yQmyPF
>>189
入れたかったんだけどね・・・
2019/07/11(木) 14:01:00.83ID:l57S3jiM
Javaはオワコン
2019/07/11(木) 14:06:11.17ID:oQkLsXMb
javaのコンセプト
write ones, test everywhere
2019/07/11(木) 14:16:47.27ID:5J3UX5Vb
debug anywhereやろ
2019/07/11(木) 14:20:46.71ID:xCkJ5LaR
Windows, WSL, Ubuntu16.04 では、Python, Perl は最初から入っている。
Ruby は、apt でインストールした

ls −l /usr/bin/python
/usr/bin/python −> python2.7

ls −l /usr/bin/python3
/usr/bin/python3 −> python3.5

ls −l /usr/bin/perl
/usr/bin/perl

ls −l /usr/bin/ruby
/usr/bin/ruby −> ruby2.3

注意。サーバーエラーになるので、全角に変換した
2019/07/11(木) 14:59:54.89ID:3GvBtncU
そういえば IBM の z/OS ではどうなっているんだろうと
思ったら z/OS シェルってのがデフォルトでインストール
されてて、こいつは POSIX compliant らしい
2019/07/11(木) 15:48:04.71ID:PMWvbDa1
それだ WSL が標準で最初から入っているようになると
昔のニュースで見たが、どうなっているの?
標準は取りやめ? Windows の最新情報追ってないからわからない
197194
垢版 |
2019/07/11(木) 16:19:18.53ID:xCkJ5LaR
Windows10 を普通にアップデートしていれば、WSL は、最初から入っている。
ストアから、Ubuntu18.04 (長期サポート版)などをインストールして、日本語化すればよい

漏れはまだ、古いUbuntu16.04 の方を使っているけど
2019/07/11(木) 18:15:20.64ID:8iBC56G3
>>184
あれは、普段使いのCUIではないからな
単なる開発用
2019/07/11(木) 18:16:22.72ID:8iBC56G3
>>189
XPは標準で入ってて問題になった
2019/07/11(木) 18:29:01.43ID:8iBC56G3
個人的には、*nixとWindowsの違いは、
シェルと馴染んだコマンド群の有無、シェルスクリプトの実行可否だけなので、
それさえできれば、どちらでもいいや。
Cygwinはややストレス溜まったけど、WSLはだいぶ快適になった。
2019/07/12(金) 00:13:06.93ID:Iwx9PgjW
cmdのオプションが/なのは当て付けなんだろうか
XENIXを売ってた頃のMS知らんけど
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況