シェルスクリプト shやbashは関数型言語だから
異論は認めない
【誰も知ってる】 関数型言語 sh, bash
■ このスレッドは過去ログ倉庫に格納されています
2018/03/27(火) 17:18:15.25ID:Isj6qsQb
2デフォルトの名無しさん
2018/05/23(水) 20:01:42.80ID:Au5e7VGg 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
FJCIW
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
FJCIW
3デフォルトの名無しさん
2018/05/26(土) 04:20:57.43ID:NxLTutQ0 今日知った落とし穴 (しかし世界的には有名な事?)
$ cat stdin_test.sh
#!/bin/sh
func() {
while read s
do
echo "func> $s"
done
}
while read s
do
echo "> $s"
func
done <file
$ cat file
1行目
2行目
3行目
$ ./stdin_test.sh
> 1行目
func> 2行目
func> 3行目
$
つまり、while read の内側で呼び出したコマンドや関数が標準入力を読み切ってしまうとループしないということ。
考えてみれば当然の事なのだが実行するコマンドが標準入力から読むことをうっかり忘れているとハマる。
防ぐ方法は上記の場合なら func < /dev/null みたいにするとか、とにかく実行するコマンドの標準入力を
何か別のものに切り替えれば良い。ssh や rsh の場合は -n オプションでも良い。
$ cat stdin_test.sh
#!/bin/sh
func() {
while read s
do
echo "func> $s"
done
}
while read s
do
echo "> $s"
func
done <file
$ cat file
1行目
2行目
3行目
$ ./stdin_test.sh
> 1行目
func> 2行目
func> 3行目
$
つまり、while read の内側で呼び出したコマンドや関数が標準入力を読み切ってしまうとループしないということ。
考えてみれば当然の事なのだが実行するコマンドが標準入力から読むことをうっかり忘れているとハマる。
防ぐ方法は上記の場合なら func < /dev/null みたいにするとか、とにかく実行するコマンドの標準入力を
何か別のものに切り替えれば良い。ssh や rsh の場合は -n オプションでも良い。
2018/05/26(土) 06:27:08.08ID:psitaF/5
それは落とし穴でも何でもないような気がするが
5デフォルトの名無しさん
2018/05/26(土) 15:50:41.10ID:NxLTutQ0 >>4
いやあ、なんというか、わかってみれば「なーんだそうだったのか」って感じなんだけど、わかるまでが大変だった。w
実際ハマったのは人の作った外部コマンド実行していてそちらの内容を完全には把握してなかったからね。
色々やっている内に while read のループ内からそのコマンドを実行しないようにするとループすることがわかったが、
それでも一体何をするとそんなことになるのかわからず、ネットを色々検索して分かった。その時見つかったページはこれ。
shのwhileループでファイルを読み、中でsshを実行すると1回しかループしない
https://b.l0g.jp/dev/ssh-inside-while/
while read の中で rsh を実行するとループが止まってしまう件
https://kakakakakku.hatenablog.com/entry/20121208/1354935645
他にもこんなの見つけたよ。覚えとくとよさげなこと。(昔から使い込んでる人は知ってるとは思うが)
| while read のwhileループ脱出にはbreakではなくexitを利用する(+それに関連するTips)
https://qiita.com/neko_the_shadow/items/39d35d09dd58c26002bb
BASHのwhile readで最終行が処理されない問題の解決方法
https://qiita.com/Ets/items/a7fa24b138b8ee883dac
いやあ、なんというか、わかってみれば「なーんだそうだったのか」って感じなんだけど、わかるまでが大変だった。w
実際ハマったのは人の作った外部コマンド実行していてそちらの内容を完全には把握してなかったからね。
色々やっている内に while read のループ内からそのコマンドを実行しないようにするとループすることがわかったが、
それでも一体何をするとそんなことになるのかわからず、ネットを色々検索して分かった。その時見つかったページはこれ。
shのwhileループでファイルを読み、中でsshを実行すると1回しかループしない
https://b.l0g.jp/dev/ssh-inside-while/
while read の中で rsh を実行するとループが止まってしまう件
https://kakakakakku.hatenablog.com/entry/20121208/1354935645
他にもこんなの見つけたよ。覚えとくとよさげなこと。(昔から使い込んでる人は知ってるとは思うが)
| while read のwhileループ脱出にはbreakではなくexitを利用する(+それに関連するTips)
https://qiita.com/neko_the_shadow/items/39d35d09dd58c26002bb
BASHのwhile readで最終行が処理されない問題の解決方法
https://qiita.com/Ets/items/a7fa24b138b8ee883dac
6デフォルトの名無しさん
2018/07/04(水) 22:46:58.53ID:gFgZc5FG 2UN
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 ★3 [蚤の市★]
- 「偽サッチャー」「自滅的」「時代遅れ」 高市首相の経済政策を海外メディアが酷評 ★2 [蚤の市★]
- ミス・ユニバース フィンランド代表の「つり目」写真が波紋… 本人釈明も批判やまず 協会謝罪「徹底的に検証」へ★2 [冬月記者★]
- 東京都「都民の税金1.5兆円が国に奪われている」「全国に分配されている」に地方民ブチギレ ★2 [Hitzeschleier★]
- 「もうキモくてキモくて…」29歳女性が語る“おぢアタック”の実態。「俺ならイケるかも」年下女性を狙う勘違い中年男性に共通点が★5 [Hitzeschleier★]
- 【画像】「ばっどがーる」優たちのアニマルルームウェア姿、エチカワすぎる描き下ろしが登場! [爆笑ゴリラ★]
- 竹中平蔵「日米が長年守り続けてき台湾有事に関する曖昧戦略の知恵を一瞬にして無にさせた岡田の責任は非常に重い」 [271912485]
- 女の悲鳴聞くと嬉しい気持ちになる
- 中国人、超ド正論。「チベットやウイグルに住んでるのはチベット族やウイグル族だが、アイヌから奪った土地に住んでる日本人こそ侵略者」 [314039747]
- AKBが廃れてきたら飽きてファンやめてきた友達がいるんだが何かムカつくんだが
- LJKだけど暇!
- 【画像】海外の寿司パーティー、レベチwwwwwwwwww [834922174]
