トップページunix
987コメント278KB

シェルスクリプト総合 その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/
08648632013/09/08(日) 18:33:28.24
期待値は以下のような構成になることです

期待:
myroot/
 link/
  a.txt
  f1/
   b.txt
  f2/
   d.txt
   f3/
    c.txt
 src/
  以下略

自分でやろうとしてみたところ
フォルダを決め打ちにしてやったとしても
シンボリックシンクを相対パスで設定することがうまく思いつきませんでした
0865名無しさん@お腹いっぱい。2013/09/08(日) 18:47:07.89
>>863
そのために lndirってコマンドがあるんだけど。それじゃダメ?

あ、imakeとかxmkmfとかの系統のコマンドだから、年代物なんだけどね。
0866名無しさん@お腹いっぱい。2013/09/08(日) 19:06:55.94
>>865
返信ありがとう。lndir知りませんでした。
ですがlndirだとsrcは絶対パスを渡す必要があるようでした。

myrootを移動できるように、相対パスでできるとうれしいです
0867名無しさん@お腹いっぱい。2013/09/08(日) 19:34:41.88
>>866
何言ってんだよw

lndir に相対パス渡せるよ。普通相対パスで使うし。
08688632013/09/08(日) 20:20:29.08
>>865,867
ありがとうございます!
相対パスで指定できました

カレントではなくlink からみた相対パスを指定するんですね
すみませんmanもちゃんと見ずに決めつけてしまってました

myroot $ lndir ../src link && lndir ../src2 link
0869名無しさん@お腹いっぱい。2013/09/11(水) 23:16:48.16
おまいら、ちょっくら教えてください。

↓のような感じのCSV形式の通信ログがあります。
[日時],[送信元IP],[送信元Port],[宛先IP],[宛先Port],[TCPorUDP],[bytes],[通信時間(s)]

このログから送信元IPが"192.168.0.1"の行だけを抜き出したいのですが、
単純にgrep "192.168.0.1"とかすると、宛先IPが"192.168.0.1"の場合も
かかってしまいまつ。(´・ω・`)

2番目の要素のところだけで検索をかけられるような、簡単なコマンドとか
処理方法ってないでしょうか? ご存じでしたらおながいします。
0870名無しさん@お腹いっぱい。2013/09/11(水) 23:26:35.43
>>869
awk -F, '$2 == "192.168.0.1" { print }'
08718692013/09/11(水) 23:49:22.31
>>870
ありがd
0872名無しさん@お腹いっぱい。2013/09/16(月) 00:31:27.99
cshの組み込みコマンド echo で¥nを改行コードとして扱いたいのですが。
例)echo "test"¥n"test"

test
test

bashは使えない環境のため、cshで実現をしたいのですが、可能でしょうか?
0873名無しさん@お腹いっぱい。2013/09/16(月) 00:33:52.08
>>872
> cshの組み込みコマンド echo で¥nを改行コードとして扱いたいのですが。
すみません、文字化けしてしましました・・・
¥n(円マーク)nです。
0874名無しさん@お腹いっぱい。2013/09/16(月) 00:51:21.64
>>872です

もう一つ、教えてください。
#!/bin/csh -f
と、シェバンの中で-fを指定すると、.cshrcの中で指定したエイリアスが有効になりません。
login.cshrcなら有効になるかと考え設定したのですが、こちらでもダメでした。
他にエイリアスを設定するのに有効な場所はないでしょうか。
0875名無しさん@お腹いっぱい。2013/09/16(月) 01:19:53.67
>>872です。
もう1つだけ。
組み込みコマンドを無効化することはできないでしょうか。
組み込みコマンドを無効にし、Gnu Coreutilesのechoを利用する、という方法も検討したいのですが。
0876名無しさん@お腹いっぱい。2013/09/16(月) 01:33:38.17
>>875
echo をフルパス指定で実行すれば?
0877名無しさん@お腹いっぱい。2013/09/16(月) 02:02:57.34
>>876
> >>875 
> echo をフルパス指定で実行すれば?
ありがとうございます。

既存のアプリケーションを改修できないため、フルパスでの指定は不可能なのです。
# 既存のソースコーソは#!/bin/csh -f ; echo "hogehoge"ときさいされており。
0878名無しさん@お腹いっぱい。2013/09/16(月) 08:54:19.20
シェルスクリプトなんだから改修ぐらいしろよ
修正できないっていう前提がおかしい
0879名無しさん@お腹いっぱい。2013/09/16(月) 09:54:54.21
>>878
> シェルスクリプトなんだから改修ぐらいしろよ
> 修正できないっていう前提がおかしい
そうですよね。プロジェクトの方針なので・・・
複数システムとソースを共有しており、1箇所ソースを修正すると
複数システムに影響があるため許可が出なく。
修正するべきだと思うのですが。
0880名無しさん@お腹いっぱい。2013/09/16(月) 09:57:13.27
>>873
可能だと思いますが、なぜできないかもしれないと思われるのでしょうか。
0881名無しさん@お腹いっぱい。2013/09/16(月) 10:05:41.73
>>874
-fは環境を引き継がないプロセスの起動になるので、エイリアスだけでなく、その他も引き継げなくなります。
一行目のシェル宣言はシェル起動時に実行ファイルではなく、シェルの引数として渡すことで無視されます。
% csh 実行ファイル.csh
0882名無しさん@お腹いっぱい。2013/09/16(月) 10:22:31.51
>>880
> 可能だと思いますが、なぜできないかもしれないと思われるのでしょうか。
実際に夏季のようなスクリプトを書いて挙動を確認したのですが、
¥nが文字列として扱われ、改行記号として扱われませんでした。

% cat 1_test.csh
#!/bin/csh

type echo
which echo

echo "abc\ndef"

% ./1_test.csh
echo is a shell builtin
echo: shell built-in command.
abc\ndef

bashだと-eを使うことでうまく処理できるのですが。
echo -e "ttt\nttt"
ttt
ttt
0883名無しさん@お腹いっぱい。2013/09/16(月) 10:29:07.00
>>881
> 一行目のシェル宣言はシェル起動時に実行ファイルではなく、シェルの引数として渡すことで無視されます。
> % csh 実行ファイル.csh

cshの引数にしたのですが、実行ファイルの先頭で宣言しているためやはり無効化されるようです。

◯-f付きのシェルファイル
% cat 2_test.csh
#!/bin/csh -f

type echo
which echo

echo "ghi\nlmn"

◯呼び出し元のシェルファイルでエイリアスを設定後、cshの引数として実行
% cat test.csh
#!/bin/csh

alias echo /bin/echo

csh ./2_test.csh

% ./test.csh
echo is a shell builtin
echo: shell built-in command. (←エイリアスが無効になっている)
ghi\nlmn
0884名無しさん@お腹いっぱい。2013/09/16(月) 11:01:58.54
>>882
いくつかの環境で試したのですが、シェルファイルではうまくいく環境もありました。(コマンドラインは大体ダメでした)
妥協になりますが、素直に改行するのはどうでしょうか?
echo "abc"
echo ""
echo "def"

どのシステムでも動くと思いますので、安全度が増します。
0885名無しさん@お腹いっぱい。2013/09/16(月) 11:12:56.37
>>884
> 妥協になりますが、素直に改行するのはどうでしょうか?
そうですね、最終的にはロジックを修正してすすめることになると思います。
が、修正せずに進められるのでしたらそのほうがよく。

> どのシステムでも動くと思いますので、安全度が増します。
そうですね・・・移植性の高いソースにするには、そうすべきだと思います。
0886名無しさん@お腹いっぱい。2013/09/16(月) 11:37:28.95
>>883
.cshrcか何かにaliasの設定はしていますか?
呼び出し元で定義したaliasは引き継がれません。
環境変数や変数などは引き継がれないことがあるので注意が必要です。
0887名無しさん@お腹いっぱい。2013/09/16(月) 13:59:13.40
>>883
> % csh 実行ファイル.csh

それが許されるなら、
alias echo /bin/echo
を書いたファイル "foo" を用意して、

$ cat foo 実行ファイル.csh | csh -f -s

で実行すればいいのでは
0888名無しさん@お腹いっぱい。2013/09/16(月) 20:28:28.64
.cshrcを何回実行しても破綻しないようにして
(set path = ($path hoge) のようなものは避ける)
source .cshrcで読んでしまえばいいんじゃないの?
0889名無しさん@お腹いっぱい。2013/09/16(月) 21:44:09.50
csh(笑) うぜぇ〜

↓のスレに移動してこっちへは帰ってくんな!
C shell 撲滅委員会
http://toro.2ch.net/test/read.cgi/unix/1094041299/
0890名無しさん@お腹いっぱい。2013/09/16(月) 22:15:45.70
>>889
csh が大好きだから csh で開発するぜ!
って話じゃないんだから悪くないだろ。
0891名無しさん@お腹いっぱい。2013/09/16(月) 22:30:01.35
>>886 , 887
返事が遅れてすみません。


.cshrcを利用することは諦めました。
全スクリプトファイルが共通で呼び出している設定ファイルがあるのでそこにセットすることに・・・
0892名無しさん@お腹いっぱい。2013/09/16(月) 22:35:03.48
>>888
こんなかんじでしょうか?

% cat .cshrc
alias ll ls -ltr

% cat test.csh
#!/bin/csh -f

source ~/.cshrc
ll

こちらも検討してみましたが、作りがイケてなくて重複が発生してしまいました。。。
0893名無しさん@お腹いっぱい。2013/09/16(月) 22:36:48.32
>>890
そうですね。私も普段はkshとbashを使ってるのですが。
なかなか、スクリプトを書くのは難しいシェルですね。
0894名無しさん@お腹いっぱい。2013/09/16(月) 22:41:04.42
皆さん有難うございました。
結局、bashでechoを自作。
アプリケーション共通の環境変数ファイルにエイリアスを設定し、echoをCallされたら自作のechoを呼び出すようにしました。
apl_env:alias echo ~/echo
echo:#!/bin/bash;echo -n -e $1
こんなかんじです。。。
アプリケーションをいじれなかったりシェルがcshだったりといろいろ厳しいですね・・・うーむ。
0895名無しさん@お腹いっぱい。2013/09/16(月) 23:33:30.83
>>886
> >>883 
> .cshrcか何かにaliasの設定はしていますか?
それにしても、aliasはどこで設定するのが正しいのでしょうかね?
shebangに-fを設定すると.cshrcが読み込まれないとすると・・・
各アプリケーションやユーザに共通の設定ファイルを作成し、アプリケーションを実行するときにそれを叩いてから実行するのがただしいのでしょうか?
本来、その手の共通ファイルは.cshrcかと思っていたのですが。
0896名無しさん@お腹いっぱい。2013/09/16(月) 23:42:02.64
>>895
man cshで分かりますが、-fはリソースやセットアップファイルを読まない、事前コマンドを実行しない、なので起動が早い
というときに使います。
aliasはcshの場合、.cshrcで基本的には書きます。
逆に言えば、-fは呼び出しユーザの環境を引き継ぎたくない時に使います。
0897名無しさん@お腹いっぱい。2013/09/16(月) 23:48:48.49
> >>895 
> aliasはcshの場合、.cshrcで基本的には書きます。
> 逆に言えば、-fは呼び出しユーザの環境を引き継ぎたくない時に使います。
ありがとうございます。

-fを使っており、かつ、エイリアスだけを使用したい場合、というのは本来ありえないのですね・・・
shebangに-fをつけた場合、個別に必要最低限の設定だけをスクリプトに設定する、ということですね。やっぱりそうですよね・・・要求が矛盾している、ということが納得出来ました。ありがとうございます。
0898名無しさん@お腹いっぱい。2013/09/17(火) 09:56:45.56
>それにしても、aliasはどこで設定するのが正しいのでしょうかね?

あれはコマンドラインで人間がラクするために使うものであって、
スクリプト中で alias なんぞ使わないのが正しい。
0899名無しさん@お腹いっぱい。2013/09/17(火) 10:04:20.08
スクリプトの中でヒストリーを使いたいんですが、

#!/bin/sh
echo hoge
!!

ってやっても、!!: command not found
になります><
もちろん、2回同じコマンド書けばいいだけですが、
スクリプトのファイルサイズも節約したいので !! が使いたいです。
使えるようにする方法をご存知の方、女教授ください。
0900名無しさん@お腹いっぱい。2013/09/17(火) 10:23:48.60
>>899
!!じゃなくて申し訳ないけど、再利用するなら変数に入れたらどうなの?

#!/bin/sh

CMD="echo hoge"
$CMD # 1回目
$CMD # 2回目
0901名無しさん@お腹いっぱい。2013/09/17(火) 10:38:44.78
>>899
Bourne shellは履歴機能がないので、履歴系のコマンドは使えません。
何度も書くか、>>900のように変数に入れて実行になります。
0902名無しさん@お腹いっぱい。2013/09/17(火) 13:29:56.43
シェル関数にしちゃえよ。動作確認済み↓

!!(){ echo hoge;}

!!
0903名無しさん@お腹いっぱい。2013/09/17(火) 14:32:38.90
! !!
0904名無しさん@お腹いっぱい。2013/09/17(火) 22:37:25.63
:(){ :|:& };:
0905名無しさん@お腹いっぱい。2013/09/17(火) 22:51:17.74
>>898
> >それにしても、aliasはどこで設定するのが正しいのでしょうかね?
>
> あれはコマンドラインで人間がラクするために使うものであって、
> スクリプト中で alias なんぞ使わないのが正しい。

なるほど。
変数に設定しておけば、いいですしね。
次から機会があれば参考にさせていただきます。
0906名無しさん@お腹いっぱい。2013/09/18(水) 06:21:30.43
>>904
`:': not a valid identifier
0907名無しさん@お腹いっぱい。2013/10/13(日) 20:08:45.64
こういった文章があるとして「行」を含むワードを取り出したい。
sedあたりが\bで単語 境界を設定できるようだがそれを利用して書けないだろうか?

|sed -e 's/.*\(\b.*行.*\b\).*$/\1/'

だと「文章」は
実行したい
になる。あと少しが足りない。

文章↓
そして実行したいrubyのプログラムを実行するシェルスクリプトをpipeのコマンド
0908名無しさん@お腹いっぱい。2013/10/13(日) 23:04:55.97
何をしたいのか分からないけど、こっちの環境だとこうなった

$ cat aaa
そして実行したいrubyのプログラムを実行するシェルスクリプトをpipeのコマンド

$ sed -e 's/.*\(\b.*行.*\b\).*$/\1/' aaa
実行するシェルスクリプトをpipeのコマンド
0909名無しさん@お腹いっぱい。2013/10/14(月) 00:06:21.49
「行」という文字が含まれてる漢字の単語が欲しいんだ。
この場合だと「実行」が取り出せれば完成。

例えばこのスレでは使われた漢字の多い順に
174 行
136 無
134 使
となっている。
うまく行を含む単語、このスレでは「実行」が一番多く(だいたい78個)
最終的には一番頻度の高い単語である「実行」でgrepしようと思ってる。

平たく言えば「斜め読み」の補助、斜め読みの切り口の一つとして
単語切り出したい。
0910名無しさん@お腹いっぱい。2013/10/14(月) 02:01:21.99
シェルスクリプトの範囲越えてるんじゃないの。
この辺使ってがんばれ。
http://ja.wikipedia.org/wiki/%E5%BD%A2%E6%85%8B%E7%B4%A0%E8%A7%A3%E6%9E%90#.E5.85.A5.E6.89.8B.E5.8F.AF.E8.83.BD.E3.81.AA.E6.97.A5.E6.9C.AC.E8.AA.9E.E3.81.AE.E5.BD.A2.E6.85.8B.E7.B4.A0.E8.A7.A3.E6.9E.90.E3.82.A8.E3.83.B3.E3.82.B8.E3.83.B3.E3.80.80
0911名無しさん@お腹いっぱい。2013/10/14(月) 02:27:28.77
ありがとう。
シェルスクリプトだとちょっとバックスラッシュ多くて困った感。見えにくいね。
perl 習得したら完成させてみる。
http://2ch-ita.net/upfiles/file8868.jpg

できるだけsed とか、妥協してperlとかの10年 20年先もまず変化しないで移植性高いので書きたいからね。
漢字の連なりだけだからパズルみたいに解けるとは思うんだが、まあ今は仕方ないか。
0912名無しさん@お腹いっぱい。2013/10/14(月) 04:02:31.62
kakashi は応用できないのかな?
形態素解析というとそれしか知らんが
手軽にセットアップできるから
試してみても良いかもしれん。
0913名無しさん@お腹いっぱい。2013/10/14(月) 04:06:39.07
あ、>>910 にちゃんと書いてあったな。
0914名無しさん@お腹いっぱい。2013/10/14(月) 04:11:23.12
案山子
茶筅
雌株

好きなの使えよ
0915名無しさん@お腹いっぱい。2013/10/15(火) 10:24:16.01
>>907
規制されて書き込めなかったけど、

$ echo そして実行したいrubyのプログラムを実行するシェルスクリプトをpipeのコマンド |nkf -We | kakasi -w | nkf -Ew | sed -e 's/ /\n/g' |grep 行
実行
実行

これでいいの?
0916名無しさん@お腹いっぱい。2013/10/15(火) 11:46:45.43
>>915
素晴らしい精度だ。本当に驚いた。
cygwinでkakasi インストールがリポジトリからできないのが悔しいが脅威の精度の高さ。ありがとう。

http://kakasi.namazu.org
ホームページに従ってcygwinにインストールしました感謝。

頻度見るために 最後の方に
|sort|uniq -c|sort|tail
追加で___"↓"___が出力されて期待通り。

92 実行
0917名無しさん@お腹いっぱい。2013/10/15(火) 13:05:57.54
>>916
解決してよかったけど、老婆心ながら、
「実行」は検出できるけど、
「実
行」というように検索語の途中に改行が入っていると駄目だから、そこは気をつけてね。
正規表現を工夫するとか、改行を全部取り去って長い1行にするとか、対処が必要。
0918名無しさん@お腹いっぱい。2013/10/15(火) 19:38:16.78
>>917
統計処理で最も多い単語
0919v2cの書き込むキーバインド”削除”した。918誤爆しました2013/10/15(火) 19:49:46.96
>>917
統計処理で最も多い単語をあぶり出す為だからそれぐらいなら大勢に影響がないから実質大丈夫。
自分が書いたスクリプトより10%ぐらい精度が高いからもう満足。

マシンスペック的にもこの辺がぎりぎりだから精度改良の追加処理は、
5年とか10年後の良いPCの上でだな。


~/ time w3m http://toro.2ch.net/test/read.cgi/unix/1352973453/|Word 行
19 行
86 実行
w3m http://toro.2ch.net/test/read.cgi/unix/1352973453/ 0.11s user 0.20s system 23% cpu 1.305 total
sh ~/sbin/Word.sh 行 0.10s user 0.32s system 32% cpu 1.298 total

~/ time w3m http://toro.2ch.net/test/read.cgi/unix/1352973453/|kWord 行
15 改行
95 実行
w3m http://toro.2ch.net/test/read.cgi/unix/1352973453/ 0.08s user 0.18s system 20% cpu 1.265 total
sh ~/sbin/kWord.sh 行 0.87s user 0.34s system 77% cpu 1.557 total
0920名無しさん@お腹いっぱい。2013/10/16(水) 07:59:54.71
なんか面白そうなことしているね
0921名無しさん@お腹いっぱい。2013/10/23(水) 14:54:26.78
bashでforkする方法ってあります?
0922名無しさん@お腹いっぱい。2013/10/23(水) 15:07:30.88
もちろん!
0923名無しさん@お腹いっぱい。2013/10/23(水) 16:47:26.97
うそだ!
調査の結果、bashでforkする手段は存在しなかった。
0924名無しさん@お腹いっぱい。2013/10/23(水) 16:48:42.21
調査が足りないようだな!
0925名無しさん@お腹いっぱい。2013/10/23(水) 17:13:35.47
>>924
悪魔の証明でもさせる気かよ。
反例挙げてみろよ
0926名無しさん@お腹いっぱい。2013/10/23(水) 17:16:26.30
次のレスで誰かがforkbomb投下
0927名無しさん@お腹いっぱい。2013/10/23(水) 19:03:42.40
>>926
forkbombって別のプロセスを複数起動しているだけで
現在のシェルを複製してるわけじゃないから。
0928名無しさん@お腹いっぱい。2013/10/23(水) 21:49:12.28
関数をバックグラウンドでうごかせばforkじゃないの?
forkの意味が違う?
0929名無しさん@お腹いっぱい。2013/10/23(水) 22:16:38.55
#!/bin/sh
sh $0 "$@"
0930名無しさん@お腹いっぱい。2013/10/24(木) 09:53:35.62
外部コマンドを実行した時点で
おまえはすでにfork()してる

ていうか何を指してんだ?
fork組み込みコマンドみたいなのをイメージしてるのか?
0931名無しさん@お腹いっぱい。2013/10/24(木) 10:01:56.12
そうだと思う
if fork; then
echo Parent
wait
else
echo Child
exit
fi
みたいな
0932名無しさん@お腹いっぱい。2013/10/24(木) 11:47:25.02
>>931
そうそうそうそう そういうの
0933名無しさん@お腹いっぱい。2013/10/24(木) 22:03:40.10
じゃ関数でいいじゃない
同じ事だよ
0934名無しさん@お腹いっぱい。2013/10/25(金) 13:16:58.33
>>933
ちがうっつってんだろボケ
0935名無しさん@お腹いっぱい。2013/10/25(金) 13:30:46.49
func()
( ... )
で同じことだと思うが、何か違うか?
0936名無しさん@お腹いっぱい。2013/10/25(金) 13:33:52.73
fork で何をしたいんだろう。
0937名無しさん@お腹いっぱい。2013/10/25(金) 14:11:52.49
ナポリタン食べたい
0938名無しさん@お腹いっぱい。2013/10/25(金) 14:14:05.60
&
0939名無しさん@お腹いっぱい。2013/10/25(金) 14:18:35.58
>ナポリタン食べたい

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

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

fo&
echo Parent
wait

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

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

「理解していない奴多い」とかいう以前に何がしたいのか伝わっていないから
>>944のような回答が出る
0947名無しさん@お腹いっぱい。2013/10/26(土) 00:41:27.22
飽くまで想像だけど、
親と子にPIDが違うだけでほぼ同じ処理をさせたいとする。
たまには親か子かを意識して違う処理に分岐するかもしれない。
ってとき、シェルスクリプトでどう書くのがスマート?
0948名無しさん@お腹いっぱい。2013/10/26(土) 08:16:46.51
>>946
実際やりたいことなんかなくてただイチャモンつけたいだけなんだろう。
0949名無しさん@お腹いっぱい。2013/10/26(土) 08:40:28.46
forkはしたいけどexecはしなくないってことでないの?
0950名無しさん@お腹いっぱい。2013/10/26(土) 09:03:06.42
>>949
それで何をしたいのか。
0951名無しさん@お腹いっぱい。2013/10/27(日) 13:55:20.94
それでソース詠唱したいw
0952名無しさん@お腹いっぱい。2013/10/28(月) 19:24:43.07
bashでfork出来ないってことをどうして認めないのか謎
0953名無しさん@お腹いっぱい。2013/10/28(月) 19:47:19.68
オワドの涙は0円
今井の挨拶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.16
>>952
UNIX系のOSでfork(vfork)以外に子プロセスを生成する方法ってある?
bashで関数をバックグラウンドで実行するときって、forkしてるんじゃないの?
0956名無しさん@お腹いっぱい。2013/10/28(月) 20:20:09.08
>>955
clone
0957名無しさん@お腹いっぱい。2013/10/28(月) 21:13:14.15
質問してる奴もよく理解してないみたいだが
forkじゃなくてsetsidができるかどうかじゃないの?
0958名無しさん@お腹いっぱい。2013/10/28(月) 23:38:12.10
>>952
そもそも質問者が言うforkが何を指しているのか分からん
エスパー待ち
0959名無しさん@お腹いっぱい。2013/10/28(月) 23:43:57.16
>>931じゃねえの?
0960名無しさん@お腹いっぱい。2013/10/28(月) 23:51:19.29
fork()しただけで親プロセスと同じプロセスグループに属してる状態が欲しいってことか
sh関数をバッググランド実行すると親プロセスとは別のプロセスグループに設定されてから実行されるから、
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()しか理解してないという可能性も高いけど。
レス数が950を超えています。1000を超えると書き込みができなくなります。