シェルスクリプト総合 その32
■ このスレッドは過去ログ倉庫に格納されています
シェルスクリプトに関する総合スレッドです。 全般 ・荒しは無視しましょう。 ・丁寧な姿勢を心掛けましょう。 ・ネチケット(死語)を意識しましょう。 ・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。 シェルスクリプト総合 その31 https://mevius.5ch.net/test/read.cgi/tech/1565446670/ #!/bin/sh trap 'echo trapped; exit' QUIT echo $$ sleep 60 これを、sh test.sh & ってやって 表示されたプロセスIDに対してkill -q QUIT プロセスIDって やっても何も表示されないんだけど、どうやって確認した? sleepというかコマンドが実行が終わるまでtrapで設定したのは動かないよ なんか言い方が変だな。POSIXでそのような文が書いてあったと思うそのまま書いた コマンドが実行中はシグナル受け取っても実行されない、コマンドが終わってから実行 for i in $(seq 60); do sleep 1; done とかで動くでしょ あれ?なんかおかしいね。 じゃあ>>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 $! >>328 つまりコマンド実行中はtrapしていても無視されて 強制終了してしまうってこと? 無視ではなくて保留だな。受け取っていることは受け取っている 保留だとしたらkill -s QUITした時点で終了するのはおかしいはずだが? >>329 shって?dashでいいの?表示されたけど 強制終了ってなにをいいたいのかわからん dashはtrap中の標準出力にクセがあるかな?dash起動してコマンドラインでtrapでechoして、他からシグナル送っても出力されないリターンキー叩いたりしたら出る、コマンドラインではね>>329 はそうならんけど >>332 なにを言いたいのかわからん。>>326 は解決したんだろ? 強制終了と思い込んで次の展開されても困るぞ >>333 全ては>>329 でdashとbashで動作に違いがあるってことだよ 強制終了は強制終了。そのまんま終了してしまうってこと 強制終了自体してなくないんじゃないの なぜかスクリプトファイルとして実行すると、dash/kshではサブシェルのtrapが動いてないな>>329 は シグナル無視なのかなんなのかendまで動き終わる >>326 はそんなんじゃなくて、単なるシンプルな間違いで、違いもなんもないけど 僕もPowerShell愛用しています。 これを使い始めてから人生茨色です! 例えば/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 という表示が出てくるのですがこれを表示させない方法ってありますか? Bugzilla に登録されてるね。 Gecko_IOThread] WARNING: pipe error: Broken pipe: ... ipc_channel_posix.cc https://bugzilla.mozilla.org/show_bug.cgi?id=1550919 >>345 つまり標準ブラウザ変えるかchromeとかにすれば良い感じですね。pipe errorとか connection reset の方で検索してました、ありがとうございますm(_ _)m GNU sedって一応POSIXに準拠してるけど、色々拡張機能もあるじゃん こういう拡張機能がほとんど無い、純粋にPOSIX標準に準じたようなsedやらawk、bcなんかの実装ってある? GNU sed, GNU awk には --posix オプション、GNU bc には --standard っていうオプションが用意されている やっぱzshクソ。pathとかstatusが特殊変数なのやめてくれ。 しかも大文字と小文字区別しねーし path=hogehogeってやったら、環境変数PATHから検索しなくなる。 command not found! 単にいままでのに慣れて違いを受け入れないってだけだな なんだ、単に zsh = ksh + tcsh ってのを理解してなくて的外れな文句言っているだけじゃん アホらしい。文字通り >>1 より > ・csh/tcshでのシェルスクリプトは*まったく推奨しません* >>353 > なんだ、単に zsh = ksh + tcsh ってのを kshにまったく推奨しないものを加えたら、クソになるんじゃないですかねぇ(笑) あと、環境変数の大文字と小文字は区別されてるのに PATHに関してだけ区別されないのはどう考えてもクソだと思いますよ pathに代入してもPATHが変わるってどう考えても 存在理由がない機能でしょw そんなに不満があるなら誰かがフォークしてそれがメジャーになってるだろ 俺が正しいって言ってもお前の頭の中ではだな せやな。 事実一番メジャーなシェルはBashだしね。 >>356 わざわざ後付けで書いてあるのに根本的に何も理解しようとしてないだけだな 大文字小文字を判断してないじゃないよ、 PATHは単なる文字列pathは配列、 pathはcsh特有での、 PATHとpathという別の2つの環境変数 shモードcshモードを切り替えてなんていう実装ではなくちゃんぽんの可能な実装なので、PATH/pathをどちらか変更したら相対する方にも同期するというのだろ。そもそもcshでのpathがそういうものらしいが 内部的に参照しているのはpathの方かな。同期されない特定状態の場合から(どういうときか探してみようw) 今まで使っていたのと違うというだけじゃ話にならない、俺が正しいって言ってもお前の頭の中ではだなでしかないということ(>>355 なんてそれが甚だしいけどw) cshがーっていうけど、zshとcshに互換性はまったくないじゃん 真似しなくていいものを真似した結果、貴重な短い変数名が 使えなくなってしまったことに違いはないんだけど 作りもしないのに何を文句だけ言っているのだか。そんなに俺が偉いしたいの? This is a shar file containing zsh, a ksh/tcsh-like shell. というコンセプトで始めてるんだよ、その成果が認められているのは有名ディストリでもパッケージとしてあるんだから明らかだろう そんなに俺の考えたのが最強なら作ってみればいいじゃん、フォークしてでも。世界に名を轟かせるいい機会だぞ、こんな匿名で偉そうに評論してんじゃなくw zshのクソ機能をクソ機能と言っただけで なにファビョってるんだろう? お前が作ったわけでもないだろうに バカにされたとでも思ってるのか? クソ機能をクソ機能と言えるほど全然賢くないのが明らかなのに、自覚のないヤツ(ら?)だなあという。自覚がないようだからでしかないんだがな いや、そのコメでますますアレでしかないなあ。自分は何かをクソと呼ぶが、自分が同じように呼ばれると聞かないって、じゃあ、そもそもどういうつもりでクソと呼んでいるのか?哲学だよww 結局俺偉いだけもしくはただの根拠のない感情だけだから、俺が自分自身と同じだと思ってそんなコメすんだろな?としか思えんけど うわっw なんだろう、これ美味しくないって言ったら お前は料理できるんか?みたいな反応 ただの評論家だろ、評論家は評論するな! 自分で料理しろ、自分で自分で絵をかけ、自分で歌を歌え プロよりうまくなかったら、評価する資格なし。みたいな極端な考えw わざわざ不特定多数のとこで美味しくないという個人的感情を書く理由はなんなん それに対して、そんなことないぞなぜなら〜と返しているのだが。なにか問題があるか? 料理調理の内容がというなら自分で作れというのはいたって当たり前だろう。不満があったら自分で調理するのがOSSだからな 結局俺偉いってだけで反論を許さない、なぜなら俺偉いからというだけかw > わざわざ不特定多数のとこで美味しくないという個人的感情を書く理由はなんなん レビュー。Googleもやってるで ちょっと意味がわからんが、ああいうとこはやりとりはしないできないだろ てか、ど素人かよ。スクリプトであってもまがりなりにも何か自分で作っているのに未だど素人かよと思ってしまうな、クレーマーレベルすぎてw そんなに気に入らないなら自分で新しいシェル作れば良いのに。 信者の例 新しいバトルシステムが使いづらい → そんなに気に入らないなら自分で新しいゲーム作れば良いのに 「設定」が使いづらい → そんなに気に入らないなら自分でOS作れば良いのに ナポレオン「私は卵を産めないが、卵が腐っていると判断できる」 (Zshの利用者が満足するような)シェルを作れる自信はないが、 Zshの一部機能を腐ってるとは言える。 ていうか他の人も指摘してたけど二三の欠点を指摘されただけで まるで自分の人格を全否定されたかのような反応をするのってどういう感情なんだろう? psコマンドで見て a.out で実行されているプロセスを全部 kill -9 してくれるスクリプトってどう書いたらいいですか 約に立たない2chのクズ共が自分で調べた方が早い ps | grep "./a.out" | grep -v grep | awk '{ print "kill -9", $1}' | sh 煽って回答を貰うのはよく見掛ける光景だけど 煽りながら自己解決するのは珍しいなw zshはbashの強化版だと思ってたら違うのね bashを覚えるので手一杯なんで他のシェルに浮気する余裕ないけど シェルスクリプトとしてはzshは使わないね。 bashとだいたい互換性があるシェル。 スクリプトとしてはPOSIX準拠にするかbashでしょう >>379 派生、元とした流れが全く違うからね 新しい機能つけるのに相互に参照してたり参考にしてたりするかもだが macでosアップデートしたらzsh強制になったんだが アップデートでは強制にならないよ アップデートでなくても強制でもないし、単なるデフォ >>384 >>2 のリンク先にオリジナルが書いてあるから、 どこぞに転載されたものを貼り付けなくていい この図 https://tangentsoft.com/misc/unix-shells.svg を見ると zshはtcshを取り入れてると言うが、正確にはそれをやったのはKornShellで その後継のksh88が、POSIX shellやbash等の現存する全てのシェルの祖先に なるわけだから、zshと同様にdashやbashなんかもtcshを取り入れてることになるんだよな。 kshってなんか凄いんだな 昔、AIXでksh書いた事あるけど AIXぐらいでしかインストールされてる環境に出逢ったことない Solarisでbsh書いてた後に触って配列使えて感動したのを覚えてる また使ってみるかなぁ >>386 図だけで想像しすぎ kshで取り入れたのはヒストリ機能などの極めて一部 そういろいろいうなら、ちゃんと調べた方がいいよ >>388 インストールというのならmacOSも昔から標準で入ってる デフォルトログインシェルなのはAIXぐらいらしいね UNIXでbshができる BSDでcshができる 改良版のtcshができる bshにtcshを追加したkshができる kshが商用だったので派生が拡がる 軽量版bshのashができる Lnux版ashのdashができる GNU版bshのbashができる 機能マシマシのzshができる 独立系のfishができる こんな感じか 文字の修正とか昔のbashにはなかったらしいな それ依然に単に図を適当に日本語にしただけの説明なんてしなくていいから。 TETって使ってる? OpenGroupが配布してる適合テスト 例えば'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を表示する仕組みなんでしょうか…? $1, $2 などは、フィールド(列)変数。 $0 は、入力レコード(行)全体 こういう特別な変数に、代入してはいけない! 読み込む事だけに使うこと! それは言いすぎだろう。少なくとも gawk では何が起こるか明確になっている。 理解する気が無いならやらない方がいいというならその通りだ。 シェル芸の定義って、スクリプトファイル作らないで、シェル(CLI)を駆使して 実用的ではないネタを披露すること。でいいですかね? いやあまりにもくだらないネタが多いんで 難読化シェル芸の解読 ながいPythonコードをシェル芸で実行させる じわじわ広がる星型模様シェル芸 動く!電光掲示板シェル芸 ボディビルダーが泳ぐシェル芸 アイドルグループが46か48かわからなくなったときにワンライナーで解決する方法 鬼滅の刃の幾何学模様シェル芸 踊るgifシェル芸 ojichatグラフシェル芸 3の倍数と3が付く数字のときだけアホになるシェル芸 床屋シェル芸 闇シェル芸「さあ、闇のゲーム(シェルゲイム)の始まりだぜ!」 実践 キングウンコの作り方 画像っぽい素数をシェル芸でつくる fish起動時にサイゼリヤ1000円ガチャの結果を表示する 【危険シェル芸】禁じられた闇の魔術とその防衛術?? >>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が作り直される風に >>403 ふむ それがくだらなくないレスなのか。読んだ時間を返せw >>399 >>404 ありがとうございます、普通に動くから大丈夫だと思ってましたm(_ _)m とりあえず今後は素直にprintで出力します kshって今時だとninjaとか使うんか… 昔ながらのMakefileじゃないんだね 教えていただきたいことがあります。 ワンクリックで複数のターミナルを開いてそれぞれで別々のコマンドを動かすスクリプトを書きたいと思っています。 gnome-teminalにオプションつけたらいけるかと思いますしたが、うまく行かなくて、、なにかアドバイスいただけないでしょうか gnome-terminal なら -- の後に実行したいコマンドを書けばいいだけみたいだけど 動いているが挙動がイマイチとかじゃないの? うまく行かないって、そのままTerminalとしてウィンドウを残しておきたいとか引き続きインタラクティブでなんかしたいとか? GUI Terminalアプリは一般的にコマンドが実行し終えたらアプリも終える=ウィンドウも消えるという、まあそうなるか的な(まあshもそうだし) gnome-terminalはオプションでウィンドウを残すようにできるが、なんかイマイチかな、出るべきものが出てないとか gnome-terminal -- sh -c 'なんかコマンド;sh' が確実に解りやすいかなあ shで引き続きインタラクティブにするのには、--rcfile スクリプトファイル という変態的な方法で gnome-terminal -- sh --rcfile スクリプトファイル とかあったが、変態すぎてしないなw 返信ありがとうございます! 具体的にはFIFOを複数作成した後に、 ffplay (作成したfifo) というコマンドを fifoの数だけ開きたいのですが、数が多くて一つ一つ開くのは大変なので、スクリプトで一気に開けないかと考えているところです。 ffplayって自分で独自のウィンドウ開くんじゃないの? 全てバックグラウンドで起動する/動かせばいいんじゃないの? ffplayが吐くログも同時に見たいとか?? >>413 説明不足ですみません、、 そうなんです、ログも同時に複数表示させたくて 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起動まで行かないけど >>415 ありがとうございます!! できました! 先週linux初めて触って分からないことだらけで、お手数おかけしました、、 index=2,INFO1="abc",INFO2="ab,c" ↑こういう風に 「カンマ区切りで値が並んでて、区切り文字ではないカンマは引用符で囲まれてる」 みたいなデータに対して、 シェルスクリプトでINFO2やらindexやらの値を取得したいんだけどどういう方法がいいですかね。 IFSをカンマにする方法では引用符で囲まれてるカンマも区切りと見做されちゃうし… シェルって""←の中を特別に扱う筈だから、evalとか使えば効率的に処理できそうなんだけど、 思い付かん… なんか前も似たような話があった気がするな でもカンマ区切りでダブルクォートの中にカンマが含まれてるのかー ってかCSV形式だなw CSV関連のコマンドと連携させれば簡単に作れるけど 俺は使いたくないなー。というすると自分でパースするしか無いかなー 自分が必要なら最悪パースするけど、簡単な方法ないかなーw あ、IFSをカンマにしてから、evalに渡せばできるんじゃね? setはいらんかったw あとはスペースが入ってるときかー、どうやって対処するかな? >>418 CSV形式の一種なのかな。 ただ改行はなくて、常に一行。 あと引用符はあったりなかったりする。 具体的には、m3u8プレイリストの一部を処理したいのよね。 プログラミング言語でやったことあるけど もともとあるデータに手を加えられないなら カンマを違う区切り文字に置き換えたかな 行解析ロジック入れたりもした 最近作ったシェルスクリプトだと 読み込むファイルをちゃんと設計して そんなデータは行末に来るようにした そしてwhile readで処理できるようにしてる 超具体的に言うと(てかここまで直接に状況を晒すとクレクレみたくなるなw) “playlist.m3u8”っていうファイルだとして ↑こういう形式の行が沢山あるんだけど、 ここのRESOLUTIONの値と対応するMOVIE-URIの値をずらずら欲しい。 IFSを変える方法だとやっぱり引用符に関係なく「,」で区切られちゃうのよね while read l; do IFS=','; for s in "$l"; do echo "$s" done done < ./playlist.m3u8 >>423 自分で生成するんだったら区切り文字は絶対に 他の文字と被らないようにするんだけどね…… 面倒になったー index=2,INFO1="abc",INFO2="ab,c" を index=2 INFO1="abc" INFO2="ab c" に変換すれば evalできるよ! あとは頑張ってー ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる