シェルスクリプト総合 その21
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001名無しさん@お腹いっぱい。
2012/11/15(木) 18:57:33.11□お約束
・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。
bash/zsh/ksh/ashなどに依存する場合は明示しましょう。
Linuxユーザは/bin/shの正体がbashまたはdashなので特に注意。
FreeBSDユーザは/bin/shの正体がashなので注意。
v7 shに一番近くて、現役のshは、OpenSolaris由来のheirloom sh。
http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/sh/
http://heirloom.sourceforge.net/sh.html
・csh/tcshのシェルスクリプトは推奨されません。
(理由は「csh-whynot」でググれ)
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
manや参考リンクを見ましょう。
aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルで使えるワイルドカード等は正規表現ではありません。
正規表現の話題はスレ違い(正規表現スレへ)
・シェルスクリプトのことをシェルってゆーな
□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
awkまたはperlの方が適した処理にはそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。
□回答者への注意事項:
・シェルスクリプトでの処理方法を質問しているのに、よくわからずに
「そういうのはperl使いましょう」と回答するのはやめましょう。
安易にperlに逃げずにシェルスクリプトで処理するのが頭のいいやり方。
前スレ
シェルスクリプト総合 その20
http://toro.2ch.net/test/read.cgi/unix/1339083351/
0937名無しさん@お腹いっぱい。
2013/10/25(金) 14:11:52.490938名無しさん@お腹いっぱい。
2013/10/25(金) 14:14:05.600939名無しさん@お腹いっぱい。
2013/10/25(金) 14:18:35.581 : 投げ槍
2 : 匙を投げる
3 : exit
0940名無しさん@お腹いっぱい。
2013/10/25(金) 14:27:36.780941名無しさん@お腹いっぱい。
2013/10/25(金) 14:44:32.40931 は
#!/bin/bash
fo() {
echo Child
sleep 3
}
fo&
echo Parent
wait
こういうことじゃないかな。
0942名無しさん@お腹いっぱい。
2013/10/25(金) 20:57:40.43何で違うと思うのか説明しろボケ
正しく理解してるなら質問しにくる必要ないよな。
さっさと失せろ。
0943名無しさん@お腹いっぱい。
2013/10/25(金) 21:14:32.85やりたいんじゃないかな。
>>941 だと子プロセスがバックグラウンドになってしまう。
子プロセスもフォアグラウンドのまま親だけexitしたいみたいな。
0944名無しさん@お腹いっぱい。
2013/10/25(金) 21:48:30.710945名無しさん@お腹いっぱい。
2013/10/25(金) 22:18:42.82それだとやはりバックグラウンドプロセスのままになってしまう。
バックグラウンドプロセスはsignalの扱いがフォアグラウンドと違うから。
そこ理解してない奴多いんだけどさ。
0946名無しさん@お腹いっぱい。
2013/10/25(金) 23:31:08.32説明が下手なのが一番の問題
「本当にやりたいこと」がさっぱり分からない
「理解していない奴多い」とかいう以前に何がしたいのか伝わっていないから
>>944のような回答が出る
0947名無しさん@お腹いっぱい。
2013/10/26(土) 00:41:27.22親と子にPIDが違うだけでほぼ同じ処理をさせたいとする。
たまには親か子かを意識して違う処理に分岐するかもしれない。
ってとき、シェルスクリプトでどう書くのがスマート?
0948名無しさん@お腹いっぱい。
2013/10/26(土) 08:16:46.51実際やりたいことなんかなくてただイチャモンつけたいだけなんだろう。
0949名無しさん@お腹いっぱい。
2013/10/26(土) 08:40:28.460950名無しさん@お腹いっぱい。
2013/10/26(土) 09:03:06.42それで何をしたいのか。
0951名無しさん@お腹いっぱい。
2013/10/27(日) 13:55:20.940952名無しさん@お腹いっぱい。
2013/10/28(月) 19:24:43.070953名無しさん@お腹いっぱい。
2013/10/28(月) 19:47:19.68今井の挨拶100円
0954名無しさん@お腹いっぱい。
2013/10/28(月) 19:48:57.98/____\
/ィ赱、i_i_r赱ミ\
/ ̄ ̄ ̄ィ'。_。ヽ ̄ ̄\ レオナルド
| / _lj_ } |
\ 、{ ^' ='= '^' /
____
/____\
/ィ赱、i_i_r赱ミ\
/ ̄ ̄ ̄ィ'。_。ヽ ̄ ̄\ ラファエロ
| / _lj_ } |
\ 、{ ^' ='= '^' /
____
/____\
/ィ赱、i_i_r赱ミ\
/ ̄ ̄ ̄ィ'。_。ヽ ̄ ̄\ ドナテロ
| / _lj_ } |
\ 、{ ^' ='= '^' /
____
/____\
/ィ赱、i_i_r赱ミ\
/ ̄ ̄ ̄ィ'。_。ヽ ̄ ̄\ ラファエロ
| / _lj_ } |
\ 、{ ^' ='= '^' /
0955名無しさん@お腹いっぱい。
2013/10/28(月) 20:17:23.16UNIX系のOSでfork(vfork)以外に子プロセスを生成する方法ってある?
bashで関数をバックグラウンドで実行するときって、forkしてるんじゃないの?
0956名無しさん@お腹いっぱい。
2013/10/28(月) 20:20:09.08clone
0957名無しさん@お腹いっぱい。
2013/10/28(月) 21:13:14.15forkじゃなくてsetsidができるかどうかじゃないの?
0958名無しさん@お腹いっぱい。
2013/10/28(月) 23:38:12.10そもそも質問者が言うforkが何を指しているのか分からん
エスパー待ち
0959名無しさん@お腹いっぱい。
2013/10/28(月) 23:43:57.160960名無しさん@お腹いっぱい。
2013/10/28(月) 23:51:19.29sh関数をバッググランド実行すると親プロセスとは別のプロセスグループに設定されてから実行されるから、
fork()じゃないと言いたいわけね?
日本語不自由すぎだろw
0961名無しさん@お腹いっぱい。
2013/10/29(火) 08:45:24.15甘やかすな
0962名無しさん@お腹いっぱい。
2013/10/29(火) 09:40:23.28要するに初めに覚えた言語の関数じゃないと理解できないただのアホ
裏で動いてる本質的な処理が全く分かってない
0963名無しさん@お腹いっぱい。
2013/10/29(火) 09:58:38.32プリミティブとしてのforkが欲しかったんじゃないの?
その方が細かい制御ができる場合もあるし。
もちろんCのfork()しか理解してないという可能性も高いけど。
0964名無しさん@お腹いっぱい。
2013/10/29(火) 10:40:09.560965名無しさん@お腹いっぱい。
2013/10/29(火) 12:23:39.690966名無しさん@お腹いっぱい。
2013/10/29(火) 14:01:49.81rfork
0967名無しさん@お腹いっぱい。
2013/10/29(火) 14:39:31.730968名無しさん@お腹いっぱい。
2013/10/29(火) 16:04:45.350969名無しさん@お腹いっぱい。
2013/10/29(火) 16:20:49.30関数を呼んだり、コマンドを実行したりせずに、ということなら
無いんじゃないか。
0970名無しさん@お腹いっぱい。
2013/10/29(火) 16:37:25.490971921
2013/10/29(火) 19:39:57.670972名無しさん@お腹いっぱい。
2013/10/29(火) 21:08:55.090973名無しさん@お腹いっぱい。
2013/10/29(火) 21:39:12.02breakつかうと上のfor文抜けちゃうので
どうしたらいいか よいアイデアを 出すのだ
0974名無しさん@お腹いっぱい。
2013/10/29(火) 21:40:59.800975名無しさん@お腹いっぱい。
2013/10/29(火) 21:55:13.390976名無しさん@お腹いっぱい。
2013/10/29(火) 21:58:12.020977名無しさん@お腹いっぱい。
2013/10/30(水) 07:59:22.950978名無しさん@お腹いっぱい。
2013/10/30(水) 14:04:29.640979名無しさん@お腹いっぱい。
2013/10/30(水) 14:39:46.49case $foo in
bar) baz; if qux; then quux; fi ;;
esac
0980名無しさん@お腹いっぱい。
2013/10/30(水) 15:13:47.48ありがとう
やっぱこのダサい方法しかないか
0981名無しさん@お腹いっぱい。
2013/10/30(水) 16:16:09.22こんなのどう?
for onlyonceforbreakincase in 1; do
case $foo in
bar) baz; if qux; then break; fi; quux ;;
esac
done
0982名無しさん@お腹いっぱい。
2013/10/30(水) 17:47:57.450983名無しさん@お腹いっぱい。
2013/10/30(水) 18:11:18.13それじゃ、case文の後が実行されないだろ
0984名無しさん@お腹いっぱい。
2013/10/30(水) 22:42:14.92#!/bin/sh
LANG=C
export LANG
d=^`date "+%b %d %H:%M"`
echo $d
d=^`env TZ="JST offset 00:01" date "+%b %d %H:%M"`
echo $d
(実行結果:env TZ付きで打つと%Hがたぶん%mで出てくる)
^Oct 30 19:19
^Oct 30 10:18
dateの-vでこと無きを得たけど。
0985名無しさん@お腹いっぱい。
2013/10/30(水) 23:17:08.28Coordinated Universal Time (UTC) is used.
0987984
2013/10/31(木) 00:21:28.73TZは、UTC+15とかでフツーにhour単位でズラすのは知ってたから、勘違いした。
'offset'付けるとNGなのね。
レス数が950を超えています。1000を超えると書き込みができなくなります。