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

このエントリーをはてなブックマークに追加
938名無しさん@お腹いっぱい。:2013/10/25(金) 14:14:05.60
&
939名無しさん@お腹いっぱい。:2013/10/25(金) 14:18:35.58
>ナポリタン食べたい

1 : 投げ槍
2 : 匙を投げる
3 : exit
940名無しさん@お腹いっぱい。:2013/10/25(金) 14:27:36.78
子プロセスじゃなくてスレッドで処理したいのかな
941名無しさん@お腹いっぱい。:2013/10/25(金) 14:44:32.40
>>932
931 は

#!/bin/bash
fo() {
echo Child
sleep 3
}

fo&
echo Parent
wait

こういうことじゃないかな。
942名無しさん@お腹いっぱい。:2013/10/25(金) 20:57:40.43
>>934
何で違うと思うのか説明しろボケ

正しく理解してるなら質問しにくる必要ないよな。
さっさと失せろ。
943名無しさん@お腹いっぱい。:2013/10/25(金) 21:14:32.85
forkして、親プロセスのみexitして、子プロセスをinitの子供にするみたいなこと
やりたいんじゃないかな。
>>941 だと子プロセスがバックグラウンドになってしまう。
子プロセスもフォアグラウンドのまま親だけexitしたいみたいな。
944名無しさん@お腹いっぱい。:2013/10/25(金) 21:48:30.71
それならば、バックグランドで実行して親のシェルプロセスはそのまま終了すればいい。
945名無しさん@お腹いっぱい。:2013/10/25(金) 22:18:42.82
>>944
それだとやはりバックグラウンドプロセスのままになってしまう。
バックグラウンドプロセスはsignalの扱いがフォアグラウンドと違うから。
そこ理解してない奴多いんだけどさ。
946名無しさん@お腹いっぱい。:2013/10/25(金) 23:31:08.32
>>945
説明が下手なのが一番の問題
「本当にやりたいこと」がさっぱり分からない

「理解していない奴多い」とかいう以前に何がしたいのか伝わっていないから
>>944のような回答が出る
947名無しさん@お腹いっぱい。:2013/10/26(土) 00:41:27.22
飽くまで想像だけど、
親と子にPIDが違うだけでほぼ同じ処理をさせたいとする。
たまには親か子かを意識して違う処理に分岐するかもしれない。
ってとき、シェルスクリプトでどう書くのがスマート?
948名無しさん@お腹いっぱい。:2013/10/26(土) 08:16:46.51
>>946
実際やりたいことなんかなくてただイチャモンつけたいだけなんだろう。
949名無しさん@お腹いっぱい。:2013/10/26(土) 08:40:28.46
forkはしたいけどexecはしなくないってことでないの?
950名無しさん@お腹いっぱい。:2013/10/26(土) 09:03:06.42
>>949
それで何をしたいのか。
951名無しさん@お腹いっぱい。:2013/10/27(日) 13:55:20.94
それでソース詠唱したいw
952名無しさん@お腹いっぱい。:2013/10/28(月) 19:24:43.07
bashでfork出来ないってことをどうして認めないのか謎
953名無しさん@お腹いっぱい。:2013/10/28(月) 19:47:19.68
オワドの涙は0円
今井の挨拶100円
954名無しさん@お腹いっぱい。:2013/10/28(月) 19:48:57.98
      ____
     /____\
   /ィ赱、i_i_r赱ミ\
  / ̄ ̄ ̄ィ'。_。ヽ ̄ ̄\   レオナルド
  |    / _lj_ }    |
  \    、{ ^' ='= '^'   /
       ____
     /____\
   /ィ赱、i_i_r赱ミ\
  / ̄ ̄ ̄ィ'。_。ヽ ̄ ̄\   ラファエロ
  |    / _lj_ }    |
  \    、{ ^' ='= '^'   /
       ____
     /____\
   /ィ赱、i_i_r赱ミ\
  / ̄ ̄ ̄ィ'。_。ヽ ̄ ̄\   ドナテロ
  |    / _lj_ }    |
  \    、{ ^' ='= '^'   /
       ____
     /____\
   /ィ赱、i_i_r赱ミ\
  / ̄ ̄ ̄ィ'。_。ヽ ̄ ̄\   ラファエロ
  |    / _lj_ }    |
  \    、{ ^' ='= '^'   /
955名無しさん@お腹いっぱい。:2013/10/28(月) 20:17:23.16
>>952
UNIX系のOSでfork(vfork)以外に子プロセスを生成する方法ってある?
bashで関数をバックグラウンドで実行するときって、forkしてるんじゃないの?
956名無しさん@お腹いっぱい。:2013/10/28(月) 20:20:09.08
>>955
clone
957名無しさん@お腹いっぱい。:2013/10/28(月) 21:13:14.15
質問してる奴もよく理解してないみたいだが
forkじゃなくてsetsidができるかどうかじゃないの?
958名無しさん@お腹いっぱい。:2013/10/28(月) 23:38:12.10
>>952
そもそも質問者が言うforkが何を指しているのか分からん
エスパー待ち
959名無しさん@お腹いっぱい。:2013/10/28(月) 23:43:57.16
>>931じゃねえの?
960名無しさん@お腹いっぱい。:2013/10/28(月) 23:51:19.29
fork()しただけで親プロセスと同じプロセスグループに属してる状態が欲しいってことか
sh関数をバッググランド実行すると親プロセスとは別のプロセスグループに設定されてから実行されるから、
fork()じゃないと言いたいわけね?
日本語不自由すぎだろw
961名無しさん@お腹いっぱい。:2013/10/29(火) 08:45:24.15
クズい質問者にダラダラつきあってんじゃねーよ
甘やかすな
962名無しさん@お腹いっぱい。:2013/10/29(火) 09:40:23.28
ゆとりだから関数でサブプロセス化することも制御の仕方も分かってないだけだろ
要するに初めに覚えた言語の関数じゃないと理解できないただのアホ
裏で動いてる本質的な処理が全く分かってない
963名無しさん@お腹いっぱい。:2013/10/29(火) 09:58:38.32
出てこなくなった質問者を擁護してもしかたないんだけど、
プリミティブとしてのforkが欲しかったんじゃないの?
その方が細かい制御ができる場合もあるし。
もちろんCのfork()しか理解してないという可能性も高いけど。
964名無しさん@お腹いっぱい。:2013/10/29(火) 10:40:09.56
もうこの話終わりでいいだろ。
965名無しさん@お腹いっぱい。:2013/10/29(火) 12:23:39.69
開発のforkだったりして
966名無しさん@お腹いっぱい。:2013/10/29(火) 14:01:49.81
>>955
rfork
967名無しさん@お腹いっぱい。:2013/10/29(火) 14:39:31.73
俺たちはエスパーになる特訓中。
968名無しさん@お腹いっぱい。:2013/10/29(火) 16:04:45.35
実際のところ、bashでforkのみする方法ってあるの?
969名無しさん@お腹いっぱい。:2013/10/29(火) 16:20:49.30
>>968
関数を呼んだり、コマンドを実行したりせずに、ということなら
無いんじゃないか。
970名無しさん@お腹いっぱい。:2013/10/29(火) 16:37:25.49
fork が必要なら別の言語使った方がいいね。
971921:2013/10/29(火) 19:39:57.67
みんなありがとう
972名無しさん@お腹いっぱい。:2013/10/29(火) 21:08:55.09
このままスレ埋まりそうな勢いだなw
973名無しさん@お腹いっぱい。:2013/10/29(火) 21:39:12.02
case文の途中で抜けたいんだけど
breakつかうと上のfor文抜けちゃうので
どうしたらいいか よいアイデアを 出すのだ
974名無しさん@お腹いっぱい。:2013/10/29(火) 21:40:59.80
goto
975名無しさん@お腹いっぱい。:2013/10/29(火) 21:55:13.39
gotoをend行き以外で使うの恐い
976名無しさん@お腹いっぱい。:2013/10/29(火) 21:58:12.02
てか、gotoってcshかよ
977名無しさん@お腹いっぱい。:2013/10/30(水) 07:59:22.95
ラベル付きbreakってないんだっけ。
978名無しさん@お腹いっぱい。:2013/10/30(水) 14:04:29.64
caseにbreakは無いのでド壺ってるわけで、ラベル付きbreakはあったとしても役立たず
979名無しさん@お腹いっぱい。:2013/10/30(水) 14:39:46.49
if文で続きの処理をしなければいいだけ。
case $foo in
bar) baz; if qux; then quux; fi ;;
esac
980名無しさん@お腹いっぱい。:2013/10/30(水) 15:13:47.48
>>979
ありがとう
やっぱこのダサい方法しかないか
981名無しさん@お腹いっぱい。: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
982名無しさん@お腹いっぱい。:2013/10/30(水) 17:47:57.45
え、continueってこういう時使うんじゃないの
983名無しさん@お腹いっぱい。:2013/10/30(水) 18:11:18.13
>>982
それじゃ、case文の後が実行されないだろ
984名無しさん@お腹いっぱい。: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でこと無きを得たけど。
985名無しさん@お腹いっぱい。:2013/10/30(水) 23:17:08.28
If TZ appears in the environment but its value is a null string,
Coordinated Universal Time (UTC) is used.
986984:2013/10/31(木) 00:13:45.03
>>985
うまく書けますた。thx
アホなこと書いちゃった(^_^; 試した時期が悪かったなw
987984
ちょっと訂正。TZでうまく(-1分の時刻を表示)書けてはいなくて、結局date -vを採用した。
TZは、UTC+15とかでフツーにhour単位でズラすのは知ってたから、勘違いした。
'offset'付けるとNGなのね。