X



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

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

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

シェルスクリプト総合 その31
https://mevius.5ch.net/test/read.cgi/tech/1565446670/
0326デフォルトの名無しさん
垢版 |
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って
やっても何も表示されないんだけど、どうやって確認した?
0328デフォルトの名無しさん
垢版 |
2019/12/29(日) 02:10:00.25ID:FmabBrht
なんか言い方が変だな。POSIXでそのような文が書いてあったと思うそのまま書いた
コマンドが実行中はシグナル受け取っても実行されない、コマンドが終わってから実行
for i in $(seq 60); do sleep 1; done
とかで動くでしょ
0329デフォルトの名無しさん
垢版 |
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 $!
0333デフォルトの名無しさん
垢版 |
2019/12/29(日) 02:25:16.44ID:FmabBrht
>>329
shって?dashでいいの?表示されたけど
強制終了ってなにをいいたいのかわからん
dashはtrap中の標準出力にクセがあるかな?dash起動してコマンドラインでtrapでechoして、他からシグナル送っても出力されないリターンキー叩いたりしたら出る、コマンドラインではね>>329はそうならんけど

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

>>326はそんなんじゃなくて、単なるシンプルな間違いで、違いもなんもないけど
0337デフォルトの名無しさん
垢版 |
2019/12/31(火) 07:15:28.46ID:xfr0s5Fj
PowerShell最強説
0343デフォルトの名無しさん
垢版 |
2020/01/01(水) 08:19:52.80ID:6zSEt3Eo
>>337
使用されることが最強に少ない感
0344デフォルトの名無しさん
垢版 |
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

という表示が出てくるのですがこれを表示させない方法ってありますか?
0346デフォルトの名無しさん
垢版 |
2020/01/02(木) 14:17:59.62ID:ZoBKtk8g
>>345
つまり標準ブラウザ変えるかchromeとかにすれば良い感じですね。pipe errorとか connection reset の方で検索してました、ありがとうございますm(_ _)m
0348デフォルトの名無しさん
垢版 |
2020/01/10(金) 15:59:20.38ID:pZwemz/Y
GNU sedって一応POSIXに準拠してるけど、色々拡張機能もあるじゃん
こういう拡張機能がほとんど無い、純粋にPOSIX標準に準じたようなsedやらawk、bcなんかの実装ってある?
0349デフォルトの名無しさん
垢版 |
2020/01/10(金) 16:05:57.94ID:c8NDboJX
GNU sed, GNU awk には --posix オプション、GNU bc には --standard
っていうオプションが用意されている
0351デフォルトの名無しさん
垢版 |
2020/01/11(土) 21:29:54.53ID:9SPVzhvj
やっぱzshクソ。pathとかstatusが特殊変数なのやめてくれ。
しかも大文字と小文字区別しねーし
path=hogehogeってやったら、環境変数PATHから検索しなくなる。
command not found!
0353デフォルトの名無しさん
垢版 |
2020/01/11(土) 23:39:31.73ID:NBzz9dXo
なんだ、単に zsh = ksh + tcsh ってのを理解してなくて的外れな文句言っているだけじゃん
アホらしい。文字通り
0355デフォルトの名無しさん
垢版 |
2020/01/12(日) 09:36:05.07ID:FpBV3Lt5
>>1より
> ・csh/tcshでのシェルスクリプトは*まったく推奨しません*

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

pathに代入してもPATHが変わるってどう考えても
存在理由がない機能でしょw
0358デフォルトの名無しさん
垢版 |
2020/01/12(日) 17:34:52.15ID:J9pO5B5T
そんなに不満があるなら誰かがフォークしてそれがメジャーになってるだろ
俺が正しいって言ってもお前の頭の中ではだな
0361デフォルトの名無しさん
垢版 |
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)
0362デフォルトの名無しさん
垢版 |
2020/01/12(日) 21:32:38.39ID:UPYAUoGA
cshがーっていうけど、zshとcshに互換性はまったくないじゃん
真似しなくていいものを真似した結果、貴重な短い変数名が
使えなくなってしまったことに違いはないんだけど
0363デフォルトの名無しさん
垢版 |
2020/01/12(日) 21:53:04.90ID:J9pO5B5T
作りもしないのに何を文句だけ言っているのだか。そんなに俺が偉いしたいの?
This is a shar file containing zsh, a ksh/tcsh-like shell.
というコンセプトで始めてるんだよ、その成果が認められているのは有名ディストリでもパッケージとしてあるんだから明らかだろう

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

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

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

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

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

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

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

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

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

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

ps | grep "./a.out" | grep -v grep | awk '{ print "kill -9", $1}' | sh
0378デフォルトの名無しさん
垢版 |
2020/01/13(月) 16:03:48.34ID:cEXtDkBR
煽って回答を貰うのはよく見掛ける光景だけど
煽りながら自己解決するのは珍しいなw
0379デフォルトの名無しさん
垢版 |
2020/01/13(月) 16:56:48.83ID:48BANHU6
zshはbashの強化版だと思ってたら違うのね
bashを覚えるので手一杯なんで他のシェルに浮気する余裕ないけど
0380デフォルトの名無しさん
垢版 |
2020/01/13(月) 22:41:06.83ID:ybxFvJaC
シェルスクリプトとしてはzshは使わないね。
bashとだいたい互換性があるシェル。
スクリプトとしてはPOSIX準拠にするかbashでしょう
0381デフォルトの名無しさん
垢版 |
2020/01/13(月) 23:52:57.18ID:HaVRjpT+
>>379
派生、元とした流れが全く違うからね
新しい機能つけるのに相互に参照してたり参考にしてたりするかもだが
0383デフォルトの名無しさん
垢版 |
2020/01/14(火) 03:49:13.20ID:GtH+RxOj
アップデートでは強制にならないよ
アップデートでなくても強制でもないし、単なるデフォ
0386デフォルトの名無しさん
垢版 |
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を取り入れてることになるんだよな。
0388デフォルトの名無しさん
垢版 |
2020/01/14(火) 18:46:58.03ID:3k/caRNi
kshってなんか凄いんだな

昔、AIXでksh書いた事あるけど
AIXぐらいでしかインストールされてる環境に出逢ったことない
Solarisでbsh書いてた後に触って配列使えて感動したのを覚えてる
また使ってみるかなぁ
0389デフォルトの名無しさん
垢版 |
2020/01/14(火) 23:00:12.31ID:eC6vK415
>>386
図だけで想像しすぎ
kshで取り入れたのはヒストリ機能などの極めて一部
そういろいろいうなら、ちゃんと調べた方がいいよ
0390デフォルトの名無しさん
垢版 |
2020/01/14(火) 23:05:01.84ID:eC6vK415
>>388
インストールというのならmacOSも昔から標準で入ってる
デフォルトログインシェルなのはAIXぐらいらしいね
0391デフォルトの名無しさん
垢版 |
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にはなかったらしいな
0394デフォルトの名無しさん
垢版 |
2020/01/15(水) 07:03:57.56ID:kWU6CwmB
関係ないから独立系にしたんだけど
0395デフォルトの名無しさん
垢版 |
2020/01/15(水) 07:44:52.57ID:YlxQUfnE
それ依然に単に図を適当に日本語にしただけの説明なんてしなくていいから。
0398デフォルトの名無しさん
垢版 |
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を表示する仕組みなんでしょうか…?
0399デフォルトの名無しさん
垢版 |
2020/01/19(日) 09:17:02.04ID:qcodQ+dh
$1, $2 などは、フィールド(列)変数。
$0 は、入力レコード(行)全体

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

いやあまりにもくだらないネタが多いんで
0403デフォルトの名無しさん
垢版 |
2020/01/19(日) 19:52:31.45ID:JpGnQ0ST
難読化シェル芸の解読
ながいPythonコードをシェル芸で実行させる
じわじわ広がる星型模様シェル芸
動く!電光掲示板シェル芸
ボディビルダーが泳ぐシェル芸
アイドルグループが46か48かわからなくなったときにワンライナーで解決する方法
鬼滅の刃の幾何学模様シェル芸
踊るgifシェル芸
ojichatグラフシェル芸
3の倍数と3が付く数字のときだけアホになるシェル芸
床屋シェル芸
闇シェル芸「さあ、闇のゲーム(シェルゲイム)の始まりだぜ!」
実践 キングウンコの作り方
画像っぽい素数をシェル芸でつくる
fish起動時にサイゼリヤ1000円ガチャの結果を表示する
【危険シェル芸】禁じられた闇の魔術とその防衛術??
0404デフォルトの名無しさん
垢版 |
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が作り直される風に
0407デフォルトの名無しさん
垢版 |
2020/01/20(月) 15:24:29.08ID:oVJVVsJQ
>>399 >>404
ありがとうございます、普通に動くから大丈夫だと思ってましたm(_ _)m
とりあえず今後は素直にprintで出力します
0409デフォルトの名無しさん
垢版 |
2020/01/21(火) 21:11:00.03ID:Mn6KsPak
教えていただきたいことがあります。
ワンクリックで複数のターミナルを開いてそれぞれで別々のコマンドを動かすスクリプトを書きたいと思っています。
gnome-teminalにオプションつけたらいけるかと思いますしたが、うまく行かなくて、、なにかアドバイスいただけないでしょうか
0410デフォルトの名無しさん
垢版 |
2020/01/22(水) 07:07:11.43ID:uCiji4On
gnome-terminal なら -- の後に実行したいコマンドを書けばいいだけみたいだけど
動いているが挙動がイマイチとかじゃないの?
うまく行かないって、そのままTerminalとしてウィンドウを残しておきたいとか引き続きインタラクティブでなんかしたいとか?
0411デフォルトの名無しさん
垢版 |
2020/01/22(水) 07:22:53.82ID:uCiji4On
GUI Terminalアプリは一般的にコマンドが実行し終えたらアプリも終える=ウィンドウも消えるという、まあそうなるか的な(まあshもそうだし)
gnome-terminalはオプションでウィンドウを残すようにできるが、なんかイマイチかな、出るべきものが出てないとか
gnome-terminal -- sh -c 'なんかコマンド;sh'
が確実に解りやすいかなあ

shで引き続きインタラクティブにするのには、--rcfile スクリプトファイル という変態的な方法で
gnome-terminal -- sh --rcfile スクリプトファイル
とかあったが、変態すぎてしないなw
0412デフォルトの名無しさん
垢版 |
2020/01/22(水) 20:17:38.02ID:IMIM4EWG
返信ありがとうございます!
具体的にはFIFOを複数作成した後に、
ffplay (作成したfifo) というコマンドを
fifoの数だけ開きたいのですが、数が多くて一つ一つ開くのは大変なので、スクリプトで一気に開けないかと考えているところです。
0413デフォルトの名無しさん
垢版 |
2020/01/22(水) 20:31:41.36ID:aGAY9ZaD
ffplayって自分で独自のウィンドウ開くんじゃないの?
全てバックグラウンドで起動する/動かせばいいんじゃないの?
ffplayが吐くログも同時に見たいとか??
0415デフォルトの名無しさん
垢版 |
2020/01/22(水) 21:18:09.64ID:aGAY9ZaD
for i in 1 2 3 4; do
gnome-terminal -- ffplay $i.fifo
done
で、再生中はTerminalウィンドウも健在でログも見えるんじゃないの。ffplayが終了したらTerminalウィンドウは閉じてしまう
gnome-terminal -- sh -c "ffplay $i.fifo;sh"
で、Terminalウィンドウも残ると思うけど。Terminalウィンドウでffplayを終了させようとctrl-cすると、後のsh起動まで行かないけど
0416デフォルトの名無しさん
垢版 |
2020/01/22(水) 21:37:15.05ID:0dPQnm43
>>415
ありがとうございます!!
できました!
先週linux初めて触って分からないことだらけで、お手数おかけしました、、
0417デフォルトの名無しさん
垢版 |
2020/01/25(土) 17:35:52.15ID:2I6NhO3j
index=2,INFO1="abc",INFO2="ab,c"
↑こういう風に
「カンマ区切りで値が並んでて、区切り文字ではないカンマは引用符で囲まれてる」
みたいなデータに対して、
シェルスクリプトでINFO2やらindexやらの値を取得したいんだけどどういう方法がいいですかね。

IFSをカンマにする方法では引用符で囲まれてるカンマも区切りと見做されちゃうし…
シェルって""←の中を特別に扱う筈だから、evalとか使えば効率的に処理できそうなんだけど、
思い付かん…
0418デフォルトの名無しさん
垢版 |
2020/01/25(土) 19:29:47.91ID:nGGHbHoP
なんか前も似たような話があった気がするな
でもカンマ区切りでダブルクォートの中にカンマが含まれてるのかー
ってかCSV形式だなw

CSV関連のコマンドと連携させれば簡単に作れるけど
俺は使いたくないなー。というすると自分でパースするしか無いかなー
自分が必要なら最悪パースするけど、簡単な方法ないかなーw
0421デフォルトの名無しさん
垢版 |
2020/01/25(土) 19:44:38.62ID:nGGHbHoP
setはいらんかったw
あとはスペースが入ってるときかー、どうやって対処するかな?
0422デフォルトの名無しさん
垢版 |
2020/01/25(土) 20:29:47.31ID:2I6NhO3j
>>418
CSV形式の一種なのかな。
ただ改行はなくて、常に一行。
あと引用符はあったりなかったりする。

具体的には、m3u8プレイリストの一部を処理したいのよね。
0423デフォルトの名無しさん
垢版 |
2020/01/25(土) 20:29:55.33ID:S3XsKqnt
プログラミング言語でやったことあるけど
もともとあるデータに手を加えられないなら
カンマを違う区切り文字に置き換えたかな
行解析ロジック入れたりもした

最近作ったシェルスクリプトだと
読み込むファイルをちゃんと設計して
そんなデータは行末に来るようにした
そしてwhile readで処理できるようにしてる
0424デフォルトの名無しさん
垢版 |
2020/01/25(土) 20:48:15.05ID:2I6NhO3j
超具体的に言うと(てかここまで直接に状況を晒すとクレクレみたくなるなw)

“playlist.m3u8”っていうファイルだとして

↑こういう形式の行が沢山あるんだけど、
ここのRESOLUTIONの値と対応するMOVIE-URIの値をずらずら欲しい。

IFSを変える方法だとやっぱり引用符に関係なく「,」で区切られちゃうのよね
while read l; do
IFS=','; for s in "$l"; do
echo "$s"
done
done < ./playlist.m3u8
0425デフォルトの名無しさん
垢版 |
2020/01/25(土) 20:49:51.89ID:2I6NhO3j
>>423
自分で生成するんだったら区切り文字は絶対に
他の文字と被らないようにするんだけどね……
0426デフォルトの名無しさん
垢版 |
2020/01/25(土) 21:15:13.22ID:nGGHbHoP
面倒になったー

index=2,INFO1="abc",INFO2="ab,c"

index=2 INFO1="abc" INFO2="ab c"
に変換すれば

evalできるよ!

あとは頑張ってー
■ このスレッドは過去ログ倉庫に格納されています

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