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

■ このスレッドは過去ログ倉庫に格納されています
2019/10/25(金) 00:08:45.53ID:6btPTvif
シェルスクリプトに関する総合スレッドです。

全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。

シェルスクリプト総合 その31
https://mevius.5ch.net/test/read.cgi/tech/1565446670/
2019/12/26(木) 12:51:43.96ID:zbYMFUyq
仮にwaitする前にsleepが(一瞬で)killされたとしても
wait ${すでにいないPID} を実行してもエラーにならないんだよね
2019/12/26(木) 13:26:19.54ID:zbYMFUyq
>>287>>292もQUITだとdashで想定どおりに動かないからTERMに変更したけど
timeで測りやすくスクリプトにして実行した結果はこんな感じ

$ time sh 287.sh
start
trapped

real 0m0.103s
user 0m0.001s
sys 0m0.002s


$ time sh 292.sh
start
trapped

real 0m0.002s
user 0m0.002s
sys 0m0.000s


>>287は多くの場合、最初の [ $onhandling -eq 0 ]; を満たさないのでsleep 0.1をすることになる。
なので↓のsleep 1を取っ払いたい要望に対して、sleep 0.1に変えたのと大差なくなってる。
{ trap -- 'echo trapped; exit' QUIT; echo start; sleep 5& wait $!; echo end; }& sleep 1; kill -s QUIT $!
2019/12/26(木) 14:16:08.46ID:MI1/ojN2
>>305
あ、kill $SLEEPを読み飛ばしてたw
すまん。
2019/12/26(木) 15:10:05.95ID:W7puUhWv
自演w連投ぶりからいつもの
2019/12/26(木) 17:04:03.21ID:uIk/XshQ
自称神様の降臨か
2019/12/26(木) 17:46:42.36ID:W7puUhWv
ずっと居ついているだろ
2019/12/26(木) 20:40:26.24ID:VT4/hGaE
ただいま。ってかお前ら何やってんの?w
また俺じゃない人に絡んでるようだが
2019/12/26(木) 20:57:57.00ID:GKWkZChC
わざとらしすぎてわろた
2019/12/26(木) 20:59:56.60ID:VT4/hGaE
違うから違うって言ってるんだけどなw
2019/12/26(木) 21:06:21.96ID:GKWkZChC
はいはい
同じ反応速度、普通のスクリプトでわいわいなレスに対していきなりな同じ態度レスで絡む
同一人物でいいだろ。そんな辺なやつはそう居ないと思うけど
2019/12/26(木) 21:08:13.76ID:VT4/hGaE
意訳 俺以外はみんなあいつ
2019/12/26(木) 21:08:43.19ID:VT4/hGaE
俺の敵はみんなあいつ
の方が良いか
2019/12/26(木) 21:12:56.47ID:GKWkZChC
連投wその連投ぶりのレスの内容といい
特徴的な共通点が多すぎ
2019/12/26(木) 21:35:49.17ID:VT4/hGaE
>>307
俺もやってみたけどQUITじゃたしかにdashで動かないね
確かめたつもりだったけど

> sleep 0.1に変えたのと大差なくなってる。
実際のところ、この例だとsleep 0でも問題なかったりする
sleepという外部プロセスを呼び出す時間があれば、その間にtrapできてるから

と思ってkshでやったら動かんかったわw
kshではsleepはシェルビルトインなんだな
2019/12/27(金) 09:20:57.82ID:NrzsOb0y
横だけどQUITって使うことってある?
OSとかデバッガ系なら使うことあるだろうけど
アプリでは使わないほうが良いんじゃいかな?
2019/12/27(金) 13:14:28.69ID:GMT90LLU
>>320
それはなにか理由ある?
2019/12/27(金) 21:58:46.84ID:jjhZE+Ou
QUITってコアダンプさせるためのものでしょ?
2019/12/28(土) 12:47:18.40ID:/Zzxwqbk
POSIXでは基本的にTERMとほぼ同じだけど
XSI拡張では「なにか他の動作を追加的に行ってもよい」とあるな。
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/signal.h.html
2019/12/28(土) 23:26:23.77ID:lWCFWx/Q
QUITをトラップするとコアダンプ機能が使えなくなるというデメリットがあるね
普通はQUITでコアダンプするわけだから、あれ?コアダンプできない?ってなるかもしれない
コアダンプを明示的に生成する方法あるのかな?
あと、もしかしてdash、ksh、yashだとQUITってtrapできない?
trapしても何も動作しない
2019/12/29(日) 01:40:48.31ID:FmabBrht
dash,kshはQUITでtrapで動いてるけど。yashは試してない
2019/12/29(日) 01:53:56.90ID:MrCxy9bb
#!/bin/sh
trap 'echo trapped; exit' QUIT
echo $$
sleep 60


これを、sh test.sh & ってやって
表示されたプロセスIDに対してkill -q QUIT プロセスIDって
やっても何も表示されないんだけど、どうやって確認した?
2019/12/29(日) 02:02:29.22ID:FmabBrht
sleepというかコマンドが実行が終わるまでtrapで設定したのは動かないよ
2019/12/29(日) 02:10:00.25ID:FmabBrht
なんか言い方が変だな。POSIXでそのような文が書いてあったと思うそのまま書いた
コマンドが実行中はシグナル受け取っても実行されない、コマンドが終わってから実行
for i in $(seq 60); do sleep 1; done
とかで動くでしょ
2019/12/29(日) 02:13:23.19ID:MrCxy9bb
あれ?なんかおかしいね。
じゃあ>>287がbashだとtrappedって表示されて
shでは何も表示されないのはなぜ?

念の為、整形したやつ
#!/bin/sh
onhandling=0
trap -- 'onhandling=1' USR1
{
trap -- 'echo trapped; exit' QUIT
kill -USR1 $$
echo start
sleep 5& wait $!
echo end
}&
while [ $onhandling -eq 0 ]; do
sleep 0.1
done
kill -s QUIT $!
2019/12/29(日) 02:14:47.34ID:MrCxy9bb
>>328
つまりコマンド実行中はtrapしていても無視されて
強制終了してしまうってこと?
2019/12/29(日) 02:17:11.43ID:FmabBrht
無視ではなくて保留だな。受け取っていることは受け取っている
2019/12/29(日) 02:19:29.79ID:MrCxy9bb
保留だとしたらkill -s QUITした時点で終了するのはおかしいはずだが?
2019/12/29(日) 02:25:16.44ID:FmabBrht
>>329
shって?dashでいいの?表示されたけど
強制終了ってなにをいいたいのかわからん
dashはtrap中の標準出力にクセがあるかな?dash起動してコマンドラインでtrapでechoして、他からシグナル送っても出力されないリターンキー叩いたりしたら出る、コマンドラインではね>>329はそうならんけど

>>332
なにを言いたいのかわからん。>>326は解決したんだろ?
強制終了と思い込んで次の展開されても困るぞ
2019/12/29(日) 02:31:00.58ID:MrCxy9bb
>>333
全ては>>329でdashとbashで動作に違いがあるってことだよ
強制終了は強制終了。そのまんま終了してしまうってこと
2019/12/29(日) 02:46:04.76ID:FmabBrht
強制終了自体してなくないんじゃないの
なぜかスクリプトファイルとして実行すると、dash/kshではサブシェルのtrapが動いてないな>>329
シグナル無視なのかなんなのかendまで動き終わる

>>326はそんなんじゃなくて、単なるシンプルな間違いで、違いもなんもないけど
2019/12/29(日) 03:24:42.26ID:QzTL60WW
https://community.progress.com/community_groups/openedge_general/f/26/t/34654
Posted by ske on 8 Aug 2017 13:59
らしいよ。6. とか確かに
コマンドラインでの違いとかはわからんけど
337デフォルトの名無しさん
垢版 |
2019/12/31(火) 07:15:28.46ID:xfr0s5Fj
PowerShell最強説
2019/12/31(火) 08:44:50.09ID:qHnQy48w
諸説あります
2019/12/31(火) 15:40:24.49ID:F82oxaIy
※個人の感想です
2019/12/31(火) 23:33:05.25ID:vVhGTaaB
僕もPowerShell愛用しています。
これを使い始めてから人生茨色です!
2019/12/31(火) 23:43:55.86ID:tLgKzi5A
人生の道が茨で埋め尽くされております!
2019/12/31(火) 23:48:11.73ID:9cUyZ2YF
※ 来世にご期待下さい!
343デフォルトの名無しさん
垢版 |
2020/01/01(水) 08:19:52.80ID:6zSEt3Eo
>>337
使用されることが最強に少ない感
344デフォルトの名無しさん
垢版 |
2020/01/02(木) 13:42:39.95ID:ZoBKtk8g
例えば/usr/local/binに

#!/bin/bash
xdg-open /usr/local/bin/hoge.html

という中身のhogeってファイル入れてコマンドで同階層のhtmlを開きたい場合、
ブラウザを閉じたら

[Parent fuga,Cecko_IOThread]
WARNING:pipe error: Connection reset by peer(piyo):
Connection reset bu peer:
file /build/firefox-esr-tpvy6K/filefox-esr-68.2.0esr/ipc/chromium/src/chrome/common/ipc_channel_posix.cc. line 358

という表示が出てくるのですがこれを表示させない方法ってありますか?
2020/01/02(木) 13:59:42.22ID:Ifo0PTAe
Bugzilla に登録されてるね。

Gecko_IOThread] WARNING: pipe error: Broken pipe: ... ipc_channel_posix.cc
https://bugzilla.mozilla.org/show_bug.cgi?id=1550919
2020/01/02(木) 14:17:59.62ID:ZoBKtk8g
>>345
つまり標準ブラウザ変えるかchromeとかにすれば良い感じですね。pipe errorとか connection reset の方で検索してました、ありがとうございますm(_ _)m
2020/01/02(木) 18:23:50.86ID:8+JZKzet
>>345
プログラム板の鑑みたいな人だな
凄い
2020/01/10(金) 15:59:20.38ID:pZwemz/Y
GNU sedって一応POSIXに準拠してるけど、色々拡張機能もあるじゃん
こういう拡張機能がほとんど無い、純粋にPOSIX標準に準じたようなsedやらawk、bcなんかの実装ってある?
2020/01/10(金) 16:05:57.94ID:c8NDboJX
GNU sed, GNU awk には --posix オプション、GNU bc には --standard
っていうオプションが用意されている
2020/01/11(土) 08:05:41.49ID:IVNUyUW+
知らんかった。ありがとう
351デフォルトの名無しさん
垢版 |
2020/01/11(土) 21:29:54.53ID:9SPVzhvj
やっぱzshクソ。pathとかstatusが特殊変数なのやめてくれ。
しかも大文字と小文字区別しねーし
path=hogehogeってやったら、環境変数PATHから検索しなくなる。
command not found!
2020/01/11(土) 23:34:38.48ID:NBzz9dXo
単にいままでのに慣れて違いを受け入れないってだけだな
2020/01/11(土) 23:39:31.73ID:NBzz9dXo
なんだ、単に zsh = ksh + tcsh ってのを理解してなくて的外れな文句言っているだけじゃん
アホらしい。文字通り
2020/01/12(日) 08:42:02.61ID:QbL/hexX
なんでそんなに攻撃的なんだよw
355デフォルトの名無しさん
垢版 |
2020/01/12(日) 09:36:05.07ID:FpBV3Lt5
>>1より
> ・csh/tcshでのシェルスクリプトは*まったく推奨しません*

>>353
> なんだ、単に zsh = ksh + tcsh ってのを
kshにまったく推奨しないものを加えたら、クソになるんじゃないですかねぇ(笑)
356デフォルトの名無しさん
垢版 |
2020/01/12(日) 09:39:05.21ID:u1ffAIxu
あと、環境変数の大文字と小文字は区別されてるのに
PATHに関してだけ区別されないのはどう考えてもクソだと思いますよ

pathに代入してもPATHが変わるってどう考えても
存在理由がない機能でしょw
2020/01/12(日) 11:22:16.69ID:QbL/hexX
まるでwindows…
2020/01/12(日) 17:34:52.15ID:J9pO5B5T
そんなに不満があるなら誰かがフォークしてそれがメジャーになってるだろ
俺が正しいって言ってもお前の頭の中ではだな
2020/01/12(日) 18:17:26.10ID:QbL/hexX
せやな。

事実一番メジャーなシェルはBashだしね。
2020/01/12(日) 18:54:12.07ID:J9pO5B5T
読めない自己紹介にしかなってないな
2020/01/12(日) 19:23:15.19ID:J9pO5B5T
>>356
わざわざ後付けで書いてあるのに根本的に何も理解しようとしてないだけだな
大文字小文字を判断してないじゃないよ、
PATHは単なる文字列pathは配列、
pathはcsh特有での、
PATHとpathという別の2つの環境変数
shモードcshモードを切り替えてなんていう実装ではなくちゃんぽんの可能な実装なので、PATH/pathをどちらか変更したら相対する方にも同期するというのだろ。そもそもcshでのpathがそういうものらしいが
内部的に参照しているのはpathの方かな。同期されない特定状態の場合から(どういうときか探してみようw)

今まで使っていたのと違うというだけじゃ話にならない、俺が正しいって言ってもお前の頭の中ではだなでしかないということ(>>355なんてそれが甚だしいけどw)
2020/01/12(日) 21:32:38.39ID:UPYAUoGA
cshがーっていうけど、zshとcshに互換性はまったくないじゃん
真似しなくていいものを真似した結果、貴重な短い変数名が
使えなくなってしまったことに違いはないんだけど
2020/01/12(日) 21:53:04.90ID:J9pO5B5T
作りもしないのに何を文句だけ言っているのだか。そんなに俺が偉いしたいの?
This is a shar file containing zsh, a ksh/tcsh-like shell.
というコンセプトで始めてるんだよ、その成果が認められているのは有名ディストリでもパッケージとしてあるんだから明らかだろう

そんなに俺の考えたのが最強なら作ってみればいいじゃん、フォークしてでも。世界に名を轟かせるいい機会だぞ、こんな匿名で偉そうに評論してんじゃなくw
2020/01/12(日) 22:07:46.46ID:7H3TRCXg
zshのクソ機能をクソ機能と言っただけで
なにファビョってるんだろう?

お前が作ったわけでもないだろうに
バカにされたとでも思ってるのか?
2020/01/12(日) 22:14:00.70ID:J9pO5B5T
クソ機能をクソ機能と言えるほど全然賢くないのが明らかなのに、自覚のないヤツ(ら?)だなあという。自覚がないようだからでしかないんだがな

いや、そのコメでますますアレでしかないなあ。自分は何かをクソと呼ぶが、自分が同じように呼ばれると聞かないって、じゃあ、そもそもどういうつもりでクソと呼んでいるのか?哲学だよww
結局俺偉いだけもしくはただの根拠のない感情だけだから、俺が自分自身と同じだと思ってそんなコメすんだろな?としか思えんけど
2020/01/12(日) 22:26:10.29ID:7H3TRCXg
うわっw なんだろう、これ美味しくないって言ったら
お前は料理できるんか?みたいな反応

ただの評論家だろ、評論家は評論するな!
自分で料理しろ、自分で自分で絵をかけ、自分で歌を歌え
プロよりうまくなかったら、評価する資格なし。みたいな極端な考えw
2020/01/12(日) 22:29:57.49ID:J9pO5B5T
わざわざ不特定多数のとこで美味しくないという個人的感情を書く理由はなんなん
それに対して、そんなことないぞなぜなら〜と返しているのだが。なにか問題があるか?
料理調理の内容がというなら自分で作れというのはいたって当たり前だろう。不満があったら自分で調理するのがOSSだからな

結局俺偉いってだけで反論を許さない、なぜなら俺偉いからというだけかw
2020/01/12(日) 22:36:44.16ID:7H3TRCXg
> わざわざ不特定多数のとこで美味しくないという個人的感情を書く理由はなんなん

レビュー。Googleもやってるで
2020/01/12(日) 22:39:15.15ID:J9pO5B5T
ちょっと意味がわからんが、ああいうとこはやりとりはしないできないだろ
てか、ど素人かよ。スクリプトであってもまがりなりにも何か自分で作っているのに未だど素人かよと思ってしまうな、クレーマーレベルすぎてw
370デフォルトの名無しさん
垢版 |
2020/01/13(月) 05:57:08.53ID:iUioslZh
そんなに気に入らないなら自分で新しいシェル作れば良いのに。
2020/01/13(月) 06:56:27.50ID:00IYKkjv
信者の例

新しいバトルシステムが使いづらい
→ そんなに気に入らないなら自分で新しいゲーム作れば良いのに

「設定」が使いづらい
→ そんなに気に入らないなら自分でOS作れば良いのに
2020/01/13(月) 12:47:53.36ID:cEXtDkBR
ナポレオン「私は卵を産めないが、卵が腐っていると判断できる」

(Zshの利用者が満足するような)シェルを作れる自信はないが、
Zshの一部機能を腐ってるとは言える。

ていうか他の人も指摘してたけど二三の欠点を指摘されただけで
まるで自分の人格を全否定されたかのような反応をするのってどういう感情なんだろう?
2020/01/13(月) 15:10:18.33ID:v+Mp6rDH
psコマンドで見て a.out で実行されているプロセスを全部 kill -9 してくれるスクリプトってどう書いたらいいですか
2020/01/13(月) 15:12:27.51ID:stzsvKPq
教えてあげないよじゃん
2020/01/13(月) 15:35:35.00ID:v+Mp6rDH
約に立たない2chのクズ共が自分で調べた方が早い

ps | grep "./a.out" | grep -v grep | awk '{ print "kill -9", $1}' | sh
2020/01/13(月) 15:47:43.19ID:GhUCXbF0
374は屑だが回答ないと豹変するのもどうかと
2020/01/13(月) 16:00:10.75ID:L1QEfUqR
killall でいいんじゃないかな
2020/01/13(月) 16:03:48.34ID:cEXtDkBR
煽って回答を貰うのはよく見掛ける光景だけど
煽りながら自己解決するのは珍しいなw
2020/01/13(月) 16:56:48.83ID:48BANHU6
zshはbashの強化版だと思ってたら違うのね
bashを覚えるので手一杯なんで他のシェルに浮気する余裕ないけど
2020/01/13(月) 22:41:06.83ID:ybxFvJaC
シェルスクリプトとしてはzshは使わないね。
bashとだいたい互換性があるシェル。
スクリプトとしてはPOSIX準拠にするかbashでしょう
2020/01/13(月) 23:52:57.18ID:HaVRjpT+
>>379
派生、元とした流れが全く違うからね
新しい機能つけるのに相互に参照してたり参考にしてたりするかもだが
2020/01/14(火) 00:50:43.36ID:/0srrHag
macでosアップデートしたらzsh強制になったんだが
2020/01/14(火) 03:49:13.20ID:GtH+RxOj
アップデートでは強制にならないよ
アップデートでなくても強制でもないし、単なるデフォ
2020/01/14(火) 16:08:03.31ID:5kcRpVJe
いつもの
https://i.imgur.com/Gn7TNci.jpg
2020/01/14(火) 18:06:08.65ID:Xjyusg2Z
>>384

>>2のリンク先にオリジナルが書いてあるから、
どこぞに転載されたものを貼り付けなくていい
2020/01/14(火) 18:09:26.71ID:Xjyusg2Z
この図 https://tangentsoft.com/misc/unix-shells.svg を見ると
zshはtcshを取り入れてると言うが、正確にはそれをやったのはKornShellで
その後継のksh88が、POSIX shellやbash等の現存する全てのシェルの祖先に
なるわけだから、zshと同様にdashやbashなんかもtcshを取り入れてることになるんだよな。
2020/01/14(火) 18:10:25.17ID:Xjyusg2Z
ksh2020でたからこの図更新してくれんかなw
2020/01/14(火) 18:46:58.03ID:3k/caRNi
kshってなんか凄いんだな

昔、AIXでksh書いた事あるけど
AIXぐらいでしかインストールされてる環境に出逢ったことない
Solarisでbsh書いてた後に触って配列使えて感動したのを覚えてる
また使ってみるかなぁ
2020/01/14(火) 23:00:12.31ID:eC6vK415
>>386
図だけで想像しすぎ
kshで取り入れたのはヒストリ機能などの極めて一部
そういろいろいうなら、ちゃんと調べた方がいいよ
2020/01/14(火) 23:05:01.84ID:eC6vK415
>>388
インストールというのならmacOSも昔から標準で入ってる
デフォルトログインシェルなのはAIXぐらいらしいね
2020/01/15(水) 00:00:09.35ID:kWU6CwmB
UNIXでbshができる
BSDでcshができる
改良版のtcshができる
bshにtcshを追加したkshができる
kshが商用だったので派生が拡がる
軽量版bshのashができる
Lnux版ashのdashができる
GNU版bshのbashができる
機能マシマシのzshができる
独立系のfishができる

こんな感じか
文字の修正とか昔のbashにはなかったらしいな
2020/01/15(水) 00:15:20.12ID:iV6SKP+H
デジャヴな適当なまとめレス
2020/01/15(水) 00:24:02.07ID:PiCqpD5C
fishは全然関係ねー
互換性がない別物
394デフォルトの名無しさん
垢版 |
2020/01/15(水) 07:03:57.56ID:kWU6CwmB
関係ないから独立系にしたんだけど
2020/01/15(水) 07:44:52.57ID:YlxQUfnE
それ依然に単に図を適当に日本語にしただけの説明なんてしなくていいから。
2020/01/16(木) 07:51:49.13ID:kJFHtYN8
TETって使ってる?
OpenGroupが配布してる適合テスト
2020/01/17(金) 08:13:43.25ID:z4CRALQ3
しらん
398デフォルトの名無しさん
垢版 |
2020/01/19(日) 08:08:23.81ID:q9WTUin1
例えば'100 50'を渡すとして、コマンドと実行結果がそれぞれ
awk '$0' #100 50
awk '$0+=1' #101
awk '$0+=$0' #200
awk '$0+=$2/2' #125
awk '$1+=$2/2' #125 50
みたいになったのですが、内側3つの挙動がよく分かりません。
予想ではそれぞれ'101 51'や'200 100'や'125 75'等になると思っていたのですが、
$0って計算式を書き込むと$1を表示する仕組みなんでしょうか…?
2020/01/19(日) 09:17:02.04ID:qcodQ+dh
$1, $2 などは、フィールド(列)変数。
$0 は、入力レコード(行)全体

こういう特別な変数に、代入してはいけない!
読み込む事だけに使うこと!
2020/01/19(日) 11:47:43.00ID:eoYSOV4S
それは言いすぎだろう。少なくとも gawk では何が起こるか明確になっている。
理解する気が無いならやらない方がいいというならその通りだ。
401デフォルトの名無しさん
垢版 |
2020/01/19(日) 19:39:38.50ID:JpGnQ0ST
シェル芸の定義って、スクリプトファイル作らないで、シェル(CLI)を駆使して
実用的ではないネタを披露すること。でいいですかね?

いやあまりにもくだらないネタが多いんで
2020/01/19(日) 19:41:53.38ID:rMML9kO3
何が言いたいんだか
403デフォルトの名無しさん
垢版 |
2020/01/19(日) 19:52:31.45ID:JpGnQ0ST
難読化シェル芸の解読
ながいPythonコードをシェル芸で実行させる
じわじわ広がる星型模様シェル芸
動く!電光掲示板シェル芸
ボディビルダーが泳ぐシェル芸
アイドルグループが46か48かわからなくなったときにワンライナーで解決する方法
鬼滅の刃の幾何学模様シェル芸
踊るgifシェル芸
ojichatグラフシェル芸
3の倍数と3が付く数字のときだけアホになるシェル芸
床屋シェル芸
闇シェル芸「さあ、闇のゲーム(シェルゲイム)の始まりだぜ!」
実践 キングウンコの作り方
画像っぽい素数をシェル芸でつくる
fish起動時にサイゼリヤ1000円ガチャの結果を表示する
【危険シェル芸】禁じられた闇の魔術とその防衛術??
2020/01/19(日) 19:54:37.30ID:ExWppFRM
>>400
POSIXでも、
The symbol $0 shall refer to the entire record; setting any other field causes the re-evaluation of $0. Assigning to $0 shall reset the values of all other fields and the NF built-in variable
と明言してるね。$1〜$nを変えれば$0が再構築され、$0を変えれば$1〜$nとNFが作り直される風に
2020/01/19(日) 20:01:00.70ID:ExWppFRM
>>403
ふむ
それがくだらなくないレスなのか。読んだ時間を返せw
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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