シェルスクリプト総合 その38
- 1 :デフォルトの名無しさん:2022/12/17(土) 16:37:20.54 ID:kO3DzgkN.net
- シェルスクリプトに関する総合スレッドです。
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。
・「POSIX原理主義」「ユニケージ」「USP研究所」はPOSIXとUnixを曲解し
間違ったシェルスクリプトを広めている宗教です。洗脳されないようにしてください。
前スレ: シェルスクリプト総合 その37
https://mevius.5ch.net/test/read.cgi/tech/1633441770/
関連スレ
【Bash】Windows Subsystem for Linux【WSL】12
https://mao.5ch.net/test/read.cgi/linux/1653317390/
・Bashでプログラミング [転載禁止](c)2ch.net
https://mao.5ch.net/test/read.cgi/linux/1443885102/
・シェルスクリプト総合 その28
https://mevius.5ch.net/test/read.cgi/unix/1533154936/
・zsh その7
https://mevius.5ch.net/test/read.cgi/unix/1337844883/
・過去UNIXで使われていた ksh というシェルについて
https://mevius.5ch.net/test/read.cgi/unix/1582358403/
・【POSIX】UNIXプログラミング【BSD】 [転載禁止](c)2ch.net
https://mevius.5ch.net/test/read.cgi/unix/1443103705/
・おまえら! shell は何を使っているんですか?
https://mevius.5ch.net/test/read.cgi/unix/1012330865/
- 2 :デフォルトの名無しさん:2022/12/17(土) 16:37:59.62 ID:kO3DzgkN.net
- ・特記なき場合、POSIX準拠シェルが既定です(古きBourneシェルはほぼ絶滅しました)
POSIX準拠シェルは(d)ash, bash, zsh, (m)ksh, yash, posh, (p)boshです
参考 https://unix.stackexchange.com/questions/145522/
特定のシェルの専用機能に依存する場合は明示しましょう(特にPOSIX準拠シェルではないfish, (t)csh等)
・POSIX準拠シェルのおすすめは?→多く使われているのはDebian/Ubuntu系のdashです
・bashでいいじゃん→bashがインストールされてない環境があります。環境によってデフォルトシェルの実体は異なります
Debian系 … dash CentOS系 … bash Alpine … busybox ash Android … mksh
FreeBSD … ash Solaris,OpenBSD … ksh
macOS … bash(Single UNIX Specification準拠のために一部動作が異なる)
・macOSはzshなんだよね?→ログインシェルがzshに変わっただけで/bin/shはbash 3.2です
・シェルスクリプトは可搬性を持たせるために可能な限りPOSIXに準拠しましょう
仕様 http://pubs.opengroup.org/onlinepubs/9699919799/
・シバンになにを使えばいいの?→POSIX準拠してるなら#!/bin/sh、bashなら#!/bin/bashか#!/usr/bin/env bash
・bash依存はなるべく避けましょう。自覚なきbashism。シバンが#!/bin/shなのにbashに依存する構文を使っていませんか?
・Bourneシェル(≒POSIXシェル)はPOSIX標準化前にUNIXで使われていたシェルで多くの亜種が存在します
Version 7 UNIXのshに一番近いのはOpenSolaris由来のHeirloom Bourne Shell、次点でSchily Bourne Shellのoboshです
Heirloom Bourne Shell: sh http://heirloom.sourceforge.net/sh.html
Schily Bourne Shell: obosh http://schilytools.sourceforge.net/bosh.html
歴史的資料 https://www.in-ulm.de/~mascheck/
・csh/tcshでのシェルスクリプトは*まったく推奨しません*
参考 http://www.speech-lab.org/~hiroki/csh-whynot.euc
・Linux/UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。Manページや各種リンクを見ましょう
・ワイルドカード・パターンは正規表現ではありません。正規表現の話題は正規表現スレへ
・シェル芸とシェルスクリプトは全く異なります
・シェルスクリプトのことをシェルってゆうな
- 3 :デフォルトの名無しさん:2022/12/19(月) 02:24:48.44 ID:Emj1398e.net
- スレ建てサンキュー
- 4 :デフォルトの名無しさん:2022/12/19(月) 02:35:38.83 ID:Emj1398e.net
- このスレのグダグダ議論がメンテナにフィードバックされてたという衝撃…
手を煩わせてそう
- 5 :デフォルトの名無しさん:2022/12/19(月) 02:43:48.53 ID:HlSjKkDw.net
- お上が決める事に口出ししても無意味しか言わない壊れたラジオよりは、行動力のあるアホの方が貢献してるのが皮肉
- 6 :デフォルトの名無しさん:2022/12/19(月) 11:36:20.22 ID:N0ztMMfe.net
- POSIXを「お上」と勘違いするやつは愚かだね
POSIXは何も決めないし、決めてない
勘違いしてるやつの典型的な行動は
POSIXの仕様が変だと思った時にPOSIXのせいにして文句を言う
筋違いなのがわかっていない
- 7 :デフォルトの名無しさん:2022/12/19(月) 12:04:01.74 ID:ytAE1sHX.net
- とりあえず同じ内容の投稿は一回までにしてくれ
- 8 :デフォルトの名無しさん:2022/12/19(月) 12:23:54.61 ID:ACKFaDCE.net
- というか俺が考えた最強のシェルスクリプトの話はどうでもいいよ
ここでグダグダ言ってないで、bashのメーリングリストとかで
こんな機能考えました、作ってくださいって語ってくればいい
- 9 :デフォルトの名無しさん:2022/12/19(月) 12:47:35.29 ID:ytAE1sHX.net
- 前スレ見てもその主張に対して一つもコメント貰えてないじゃん、哀れな奴
- 10 :デフォルトの名無しさん:2022/12/19(月) 12:55:27.07 ID:ACKFaDCE.net
- 都合悪いから無視してるんだろうね
- 11 :デフォルトの名無しさん:2022/12/19(月) 12:56:04.69 ID:ACKFaDCE.net
- あとコメントはもらえてるよ
よく読みな
- 12 :デフォルトの名無しさん:2022/12/19(月) 21:15:07.83 ID:kSP3DPlm.net
- POSIX偏重主義者はめんどくさいもん。w
- 13 :デフォルトの名無しさん:2022/12/20(火) 00:12:37.48 ID:TxV4Yb7/.net
- またいつものPOSIX原理主義者が来ていたのか。懲りないなw
- 14 :デフォルトの名無しさん:2023/01/01(日) 11:46:15.75 ID:tG5gg2/T.net
- https://i.imgur.com/ZHmy555.jpg
紅白でシェルスクリプトが出てきた
- 15 :デフォルトの名無しさん:2023/01/01(日) 23:20:26.96 ID:EPk6GwwK.net
- >>14
www
- 16 :デフォルトの名無しさん:2023/01/05(木) 14:13:50.57 ID:gL1mwsvj.net
- 最先端だぜ!
- 17 :デフォルトの名無しさん:2023/01/05(木) 22:04:03.24 ID:7AKtp3Yz.net
- >>14
左側はこのファイルやね
https://github.com/kan-bayashi/ParallelWaveGAN/blob/master/egs/csmsc/voc1/run.sh
- 18 :デフォルトの名無しさん:2023/03/08(水) 11:44:14.07 ID:P4+/KkQa.net
- スレチで悪いがGNU/diffutilsのスレがあれば教えてくれないか。
diff3の改善を考えていて、その辺詳しいor考慮中の奴がいれば話をしたい。
- 19 :デフォルトの名無しさん:2023/05/05(金) 12:20:01.51 ID:0uwn+ADY.net
- アルゴリズムの改善案?
- 20 :デフォルトの名無しさん:2023/05/05(金) 13:02:20.08 ID:5lQzBSYZ.net
- いやその上の階層。
具体的にはdiffと同様に-r指定で傘下ディレクトリ全対象にすればマージ出来てgitモドキが出来るんじゃね?とか、
UNIXコマンドにmergeってのがあるが、これがそうなのか?とか。
- 21 :デフォルトの名無しさん:2023/05/13(土) 10:53:53.68 ID:ag/ehtCI.net
- すいません。
FreeBSD13.2の/bin/shですがループがread NAMEで止まる理由は&&の右項が0になるからですか?
ためしに|| trueを追加するとループが回りきったので実装的には結果が出てるのですが理由がわかりません。
> #!/bin/sh -xe
>
> echo "BBB" | while read NAME
> do
> [ "${NAME}" != "BBB" ] && :
> done
- 22 :デフォルトの名無しさん:2023/05/13(土) 12:09:39.09 ID:ICgxywxP.net
- 違う
テストコマンドが非0を返してるから
&&の右辺は評価されてないからそもそもいくつでもない
[ "${NAME}" != "BBB" ] → 偽
[ "${NAME}" != "BBB" ] && : → 偽 && : → 偽
[ "${NAME}" != "BBB" ] && : || true → 偽 || true → 真
- 23 :デフォルトの名無しさん:2023/05/13(土) 12:48:14.60 ID:ag/ehtCI.net
- 返答ありがとうございます。
そして、すみません。意図の記述が不十分でした。
質問の焦点は停止する理由では無く停止する位置です。
左項が0なのは判ってるんですが&& :が無い場合はこの式([ "${NAME}" != "BBB" ])で停止するのに&& :を付けた場合に何故か次(read NAME)で止まるんです。
さらに不可解なのが次行にcontinueを挿入するとループが完遂されてしまいます。
指摘の通り左から解釈されるので最初の式で止まるはずが結果だけ見るとなにか変です。
それで混乱したので質問しました。
- 24 :デフォルトの名無しさん:2023/05/13(土) 14:36:20.16 ID:ICgxywxP.net
- そもそも仕様として&&や||の左側は-eオプションの判定の対象になってない
だからcmd1||cmd2みたいのを使いたいスクリプトでは-eオプションを使わないorその都度オンオフするみたいな話がよくある
偽を返すテストコマンドがあるとして[ ... ]なら停止するし[ ... ] && trueなら停止しない
それとは別にプロセスの戻り値の話がある
スクリプトはechoとwhile以下をパイプでつないでるけどそれぞれ別プロセスで戻り値がある
do ... doneの中身の最後の行が非0([ "${NAME}" != "BBB" ] && :)ならwhile側のプロセスの戻り値は非0になる(-eオプションの効果で停止する)
continueで終われば戻り値は0になる
9 KB
新着レスの表示
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★