シェルスクリプト総合 その29at TECH
シェルスクリプト総合 その29 - 暇つぶし2ch117:デフォルトの名無しさん
19/04/04 20:24:57.07 opkeFDjY.net
catが困るのは、単にcatの仕様がクソってだけだろう
標準入力から読み込むためのオプションの - があるのに、
引数なしだと標準入力から読み込もうとするわけだから

118:デフォルトの名無しさん
19/04/04 20:28:22.13 19nHnpBp.net
浅いな、catは一例なのに
そのやたらプライド高そうだけど、全然そのプライドを裏付けるもの無いから、こんなことになってんやで?まあ、プライド高いから言ってもわからんだろけど
ちなみに、'*'でなくて''でもよさげなんだけど、'*'の方がやっぱりいいんだな(と、思う。そう具体的に書いてない、''に言及してはいないけど)。さて、どうしてでしょう?

119:デフォルトの名無しさん
19/04/04 20:45:06.72 opkeFDjY.net
> さて、どうしてでしょう?
お前にその答えが言えんの? *の方が良いと思ってるようだが、
正確にはディレクトリが空の時に帰ってくるのは、正確には*じゃないんだが

120:デフォルトの名無しさん
19/04/04 20:49:41.59 19nHnpBp.net
うん、>>117なんて宣える人にそう言われてたくないけど。やっぱ想像はつかないのね。なのになんで疑われているのかさっぱり。また煽って喋らせる手法?w
正確にはってのはイミフ。なんの正確?なにを言いたいのかイミフだがほぼデフォルトの環境ではそうだよ、てか、そう決められているはずなんだがなあ

121:デフォルトの名無しさん
19/04/04 20:54:08.11 opkeFDjY.net
聞いてるのは、決められているかどうかじゃなくて
なぜそういう風に決めたかだって言ってるだろ

122:デフォルトの名無しさん
19/04/04 20:55:07.83 opkeFDjY.net
だいたい、俺の想像していることがわかってない時点で
お前はダメダメなんやで?わかってるか?
俺の想像していることぐらい読み取れ!

123:デフォルトの名無しさん
19/04/04 20:56:45.08 opkeFDjY.net
ディレクトリが空の時に帰ってくるのは * ではありません。
echo ? だと ? が帰ってきます。

124:デフォルトの名無しさん
19/04/04 20:58:07.29 opkeFDjY.net
echo *[a-z]* だと *[a-z]* が帰ってきますが、
さて、このディレクトリは空でしょうか?
それとも *[a-z]* という名前のファイルがあるのでしょうか?

125:デフォルトの名無しさん
19/04/04 20:58:24.17 19nHnpBp.net
だから、なぜそういう風に決められたかっていうことをずーーっと言っているんだけど?
あんたが自分勝手な自分だけの思いで自分の考えに固執してるから先に進んでないんだけなのに。既視感ありまくりw
'*'の方がいいとまでちょっと進んで言っているのに聞かないで反発してるだけだし。答えは書いてある。さあ、理解に向けて進んでみようw

126:デフォルトの名無しさん
19/04/04 21:02:36.29 19nHnpBp.net
>>123,124
そりゃそうだ。根本的に勘違いしてる。*なんだから'*'、?なんだから'?'、[a-z]*なんだから'[a-z]*'でしょに。なにを言っているのだか
なんで、ますますプライドを裏打ちするものが無いって自ら開陳するかなあ。捨てなその意味ないプライドは。文字通りプライドが邪魔する(意味が違うか?w)でしょうに

127:デフォルトの名無しさん
19/04/04 21:04:35.03 7s/hio3T.net
>>122
あすぺってこういう人のこと言うの?
違う?

128:デフォルトの名無しさん
19/04/04 21:04:35.25 opkeFDjY.net
だから答えは書いてないって言ってるだろ
いい加減、悪魔の証明は辞めてくれ。
無いものは無い。無いという証拠を見つけられないなら
悪魔はいるってことだ!←ほんと馬鹿みたいだ

129:デフォルトの名無しさん
19/04/04 21:07:34.48 19nHnpBp.net
答えは書いてあるよ。ふんわりと。あんたに理解できるようには書いてないかもだけどwいや、プライド高いお人だからわかると思うんだけどということでw
悪魔の証明でもなんでもないのになあ。なんとか言わせたくて必死な感じ?通用しないよ何度もはw

130:デフォルトの名無しさん
19/04/04 21:08:58.45 opkeFDjY.net
※書いてないから、言えないのです

131:デフォルトの名無しさん
19/04/04 21:09:37.50 19nHnpBp.net
>>127
俺のこと?違うよww わざとやってます。なんかオモロイから
なんで自分の労力を割くのが嫌いなくせに、まわーーーーーり道してんのかなあと。どこまで回り道すんのかなとw

132:デフォルトの名無しさん
19/04/04 21:11:14.30 19nHnpBp.net
>>130
そんなあけすけな手にはのらないww

133:デフォルトの名無しさん
19/04/04 21:46:57.92 gljFUA1G.net
もうどっちがどっちなのか分からんけど
グロブに関する疑問なら答えられそうなので,
最初の質問を教えてくれ。

134:デフォルトの名無しさん
19/04/04 21:49:48.14 19nHnpBp.net
ありゃりゃ。終わっちゃうかっw
親切だな。まあいいことだけど。ヤツにとっていいこととは思えないけど(余計なお世話)

135:デフォルトの名無しさん
19/04/04 21:52:55.41 19nHnpBp.net
>>133
>>96が元、(>>105.106からの?)>>107
だよ。それ以外はいらないww(たぶん)

136:デフォルトの名無しさん
19/04/04 22:06:28.63 opkeFDjY.net
>>133
echo * (別にechoである必要はない)で
ファイルが見つからない時になぜ * を返すのか?
そういう仕様にした理由

137:デフォルトの名無しさん
19/04/04 22:52:03.02 opkeFDjY.net
ありゃ? もうすぐ答え出るかと思ってひとっ風呂浴びてきたんだが
まだでてないや。誰か曰くmanに書いてあるらしいから
知らなくても答える気があるなら、答えられるはずなんだけどなー
な?書いてないだろ?

138:デフォルトの名無しさん
19/04/04 22:55:28.86 19nHnpBp.net
そこまで言い張ってあったらどうすの?いやあるんだけど
黙って逃げるだけの未来しか見えないw

139:デフォルトの名無しさん
19/04/04 23:03:19.00 opkeFDjY.net
じゃあ先に答えを言ってくれた人へ
ありがとう

これでもう黙って逃げるだけの未来はなくなりました。

140:デフォルトの名無しさん
19/04/04 23:04:43.01 19nHnpBp.net
やかましわっ、アホっw
なんでこうも強情というか自信満々なのかなあと、実際にあるのに書いてあるのを知っている方は思うんだよ
で、ここまで強情で自身満々故になのか逃げるだけかというのも透けて見えるんだよ
まあ、>>133のお人が答えてもらえるんだからもっと待ちなさいな
なんでそうも自己都合なんだかw。俺が>>133だったら答えるのやめるw。別に>>133のお人に答えるなとか風なことでではない、あくまでも俺だったらね

141:デフォルトの名無しさん
19/04/04 23:10:20.77 opkeFDjY.net
書いてある内容をコピペすりゃ終わりなのに
長引かせてるのはお前やで?

142:デフォルトの名無しさん
19/04/04 23:13:02.33 19nHnpBp.net
そうだよ?言われなくても、そうだよ?(すでに>>131で書いてあるやん?w)
なにを急に言い出してるの?それもあんたも律儀にレスしてんのに

143:デフォルトの名無しさん
19/04/04 23:14:01.18 opkeFDjY.net
自信満々に荒らし宣言w

144:デフォルトの名無しさん
19/04/04 23:17:24.59 19nHnpBp.net
いやいや、それを言うならあんたもだって。なんだかなあ。それに俺はちゃんと答えている(ふんわりと)、それにあーだこーだ言っているのはあんたなんですけど?どっちがよりでしょうねえ?
第三者から荒らしと言われてもしょうがないかと思うが、あんたが言い出すとは、まあ、先の「言い張る~」と同じパターンやね
てかさ、せっかく>>133が出てきたのにそうやってなぜ流すようなことすんの?w

145:デフォルトの名無しさん
19/04/05 11:46:05.38 zBV/1Std.net
>>133
待ってますよ

146:デフォルトの名無しさん
19/04/07 10:20:38.47 eWoMr/0V.net
>>133
まだですか?

147:デフォルトの名無しさん
19/04/08 15:20:56.18 NNFII5Ih.net
横からだけど面倒臭いから答えを書いとくよ
bash なら man bash の Pathname Expansion に書かれてるから、それをちゃんと読んでから質問してね。

148:デフォルトの名無しさん
19/04/08 15:59:00.29 3hZl3Wdo.net
>>147
そこに「なぜ*を返すことにしたのかという理由」は書いてないって言うのが面倒だから、ソースとGoogle翻訳貼り付けるわ
URLリンク(git.savannah.gnu.org)
*パターンマッチング::シェルがパターンをどのようにマッチングするか。
単語分割後、 '-f'オプションが設定されていない限り(* Set The Builtin::)、Bashは各単語をスキャンして文字 '*'、 '?'、および '['を探します。
これらの文字の1つが現れると、その単語はPATTERNと見なされ、パターンと一致するファイル名のアルファベット順にソートされたリストに置き換えられます(* Pattern Matching::)。
一致するファイル名が見つからず、シェルオプション 'nullglob'が無効の場合、単語は変更されません。
'nullglob'オプションが設定されていて、一致が見つからない場合、その単語は削除されます。
'failglob'シェルオプションが設定されていて、一致するものが見つからなかった場合、エラーメッセージが表示され、コマンドは実行されません。
シェルオプション 'nocaseglob'が有効になっている場合、アルファベット文字の大文字と小文字を区別せずに照合が実行されます。
パターンがファイル名展開に使用されるとき、文字 '。' シェルオプション 'dotglob'が設定されていない限り、ファイル名の先頭またはスラッシュの直後に明示的にマッチしなければなりません。
ファイル名 '。' 'dotglob'が設定されていても、 '..'は常に明示的に一致しなければなりません。
それ以外の場合は、「。」 文字は特別扱いされません。
ファイル名を一致させる場合、スラッシュ文字は常にパターン内のスラッシュと明示的に一致させる必要がありますが、
他の一致コンテキストでは、後述のように特殊なパターン文字と一致させることができます。

149:デフォルトの名無しさん
19/04/08 15:59:15.40 3hZl3Wdo.net
nocaseglob'、 'nullglob'、 'failglob'、および 'dotglob'オプションの説明については、* note The Shopt Builtin ::の 'shopt'の説明を参照してください。
'GLOBIGNORE'シェル変数はパターンにマッチするファイル名のセットを制限するために使用されるかもしれません。
「GLOBIGNORE」が設定されている場合、「GLOBIGNORE」のパターンの1つとも一致する各一致ファイル名は、一致リストから削除されます。
'nocaseglob'オプションが設定されている場合、 'GLOBIGNORE'のパターンとのマッチングは大文字小文字の区別なしに実行されます。
ファイル名 '。' 'GLOBIGNORE'が設定されていてヌルでない場合は、 '..'は常に無視されます。
ただし、 'GLOBIGNORE'をNULL以外の値に設定すると、 'dotglob'シェルオプションが有効になるので、他のすべてのファイル名は '。'で始まります。 一致します。
'。'で始まるファイル名を無視するという古い動作をするには、 '。*'を 'GLOBIGNORE'のパターンの1つにします。
'GLOBIGNORE'が設定されていない場合、 'dotglob'オプションは無効になります。

150:デフォルトの名無しさん
19/04/08 16:53:14.39 6GvfotlI.net
存在する機能の説明なのでその機能について説明しているだけかなと

151:デフォルトの名無しさん
19/04/08 16:56:27.29 3hZl3Wdo.net
133 名前:デフォルトの名無しさん[sage] 投稿日:2019/04/04(木) 21:46:57.92 ID:gljFUA1G
もうどっちがどっちなのか分からんけど
グロブに関する疑問なら答えられそうなので,
最初の質問を教えてくれ。
136 自分:デフォルトの名無しさん[sage] 投稿日:2019/04/04(木) 22:06:28.63 ID:opkeFDjY [17/21]
>>133
echo * (別にechoである必要はない)で
ファイルが見つからない時になぜ * を返すのか?
そういう仕様にした理由

152:デフォルトの名無しさん
19/04/08 17:06:51.60 6GvfotlI.net
なぜかは、
だいたいは、こんな感じ(だろうで)、
if(argc < 2){
fprintf(stderr, "usage: hoge file ...\n");
exit(1);
}
if((fp = fopen(argv[1], ...)) == NULL){
warn("%s", arg);
exit(1);
}
$ rm -v '*'
rm: *: No such file or directory
$ rm -v ''
rm: : No such file or directory
$ rm -v
usage: rm [-f | -i] [-dPRrvW] file ...
unlink file
どれがエラーとして適切?ということとかとか。他にエラーにならないのが困るとか
スクリプトでしかの話なら何も返さないというのもあるけど、スクリプトだけのためのじゃないからねえ。上記の通りコマンド的にはエラーの方がわかりやすく、シェルがどのコマンドだから展開方法を変えるというわけでもないし
>>151
そこにあるキーワードで別のmanがググれるよ

153:デフォルトの名無しさん
19/04/08 17:08:25.01 6GvfotlI.net
>>152
誤 warn("%s", arg);
正 warn("%s", argv[1]);

154:デフォルトの名無しさん
19/04/08 17:14:32.56 3hZl3Wdo.net
>>152
それどれもエラーになってますよ?

155:デフォルトの名無しさん
19/04/08 17:16:06.60 6GvfotlI.net
エラーだもの。「エラーの方がわかりやすく」ってとこ?すまん変な文になった
そのままの方がわかりやすく(?)
かな。

156:デフォルトの名無しさん
19/04/08 17:16:38.44 3hZl3Wdo.net
>>152
> そこにあるキーワードで別のmanがググれるよ
今度は、どのmanですか?

157:デフォルトの名無しさん
19/04/08 17:19:09.45 6GvfotlI.net
ああ、「どれがエラーとして適切?」もか。「どれもエラーだがどれが適切?」というつもりだったんだが。「どれもエラーだがどれがエラメッセージとして適切?」までか

158:デフォルトの名無しさん
19/04/08 17:20:08.01 6GvfotlI.net
>>156
今度はという意味がわからんが、
man 「キーワード」
でググってみ

159:デフォルトの名無しさん
19/04/08 17:21:42.07 6GvfotlI.net
てか、またおまえか?いちいち教えてもらったのに文句つけてるんだなw

160:デフォルトの名無しさん
19/04/08 17:23:26.97 3hZl3Wdo.net
>>157
for i in *.txt; do rm "$i"; done
(すでに拡張子txtのファイルが全て削除されている場合)
rm: '*.txt' を削除できません: そのようなファイルやディレクトリはありません
これは適切なエラーメッセージだと思いますか?

161:デフォルトの名無しさん
19/04/08 17:24:20.52 3hZl3Wdo.net
>>158
なんで「キーワード」というふうに隠すんですか?
キーワードの中身を書きましょうよw

162:デフォルトの名無しさん
19/04/08 17:24:53.61 6GvfotlI.net
>>152の最後に書いてあるだろう。なんでいちいちいちいち教えなきゃならんのねん
コマンドとしては適切だろう

163:デフォルトの名無しさん
19/04/08 17:27:49.54 6GvfotlI.net
>>161
いちいち教えてもらわなきゃならないのに、隙あらば文句つけるようなヤツに丁寧に教える必要はないってことだよ。社会的に一般的なことだなw
まあ、もともとはあんたに具体的に教えたくないから、あんたじゃない人に他にあるよと言ってみただけだな
てか、ぜんぜん進んでねーな。こんなやりとりしてもぜんぜん進まないよ?少しは頭を働かせて自力でやってみなさいな

164:デフォルトの名無しさん
19/04/08 17:29:55.75 3hZl3Wdo.net
1. man bashにある
2. ありませんでした。
3. 他のmanにある
4. ありませんでした。
この流れか

165:デフォルトの名無しさん
19/04/08 17:31:26.91 3hZl3Wdo.net
日本語に訳してあげないと、書いてないことを認めなかったくせに
何言ってるんだろうね。

166:デフォルトの名無しさん
19/04/08 17:31:36.42 6GvfotlI.net
マジで「読めない」のな...どうしようかw

167:デフォルトの名無しさん
19/04/08 17:32:31.71 6GvfotlI.net
>>165
なにをおっしゃってるんですか?すごいな、いやすごい
な?全然進まんだろ?w

168:デフォルトの名無しさん
19/04/08 17:35:16.40 3hZl3Wdo.net
お前が出てくるといつも進まんよなw

169:デフォルトの名無しさん
19/04/08 17:37:34.84 6GvfotlI.net
あんたが進まなだけだからな、別にあんたが進まないのは俺はどうでもいいんだけど、なにか進みたがってるあんたがどう動くのかが興味ありの
なんで俺にいちいちレスしてんの?w

170:デフォルトの名無しさん
19/04/08 17:42:21.44 3hZl3Wdo.net
> なんで俺にいちいちレスしてんの?w
お前が言ってることが嘘だからだよ。
manにそういう仕様にした理由は書いてませんでした。

171:デフォルトの名無しさん
19/04/08 17:42:42.54 3hZl3Wdo.net
知らないなら、素直に知らないって言えばいいのに

172:デフォルトの名無しさん
19/04/08 17:44:22.86 6GvfotlI.net
ちょっとは進んで(ID:3hZl3Wdo がヤツだとは思わなかったのでw)、>>152を書いてみたが、ヤツはやっぱり聞かないだけだったという
俺は単に最初からmanにあるとしか言ってない、man bashに言及してるのはあったけど(>>105ですでになのに、なんでいまごろなんだ?)、まあそこからでもたどり着くかなとw
>>164なんてお前の勝手な妄想解釈。あるよ本当に
(「言っちゃった」とちょっと悔しくもある。また、「言っちゃった」のになんで探せないないねんwwwここまで言えばさすが自分で探すか?)

173:デフォルトの名無しさん
19/04/08 18:02:56.45 6GvfotlI.net
探せたか?wwまあ、探せても「読めない」可能性が高いかな
・やっぱり、探せない
・探せたが、読めなくて文句つける
・探せて、黙って逃げる
・他
どれでしょう。まあこう書いたら「他」にする可能性が高いか

174:デフォルトの名無しさん
19/04/08 18:16:37.06 3hZl3Wdo.net
> なんでいまごろなんだ?
>>105の「パス名展開」の項にないのはわかっていて、そこにないと言ってるのに
性懲りもなく、>>147で「bash なら man bash の Pathname Expansion に書かれてるから」と
いうから、こいつ読んでないなってことで日本語に訳してあげたんだろ
そして
> ファイルが見つからない時になぜ * を返すのか?
> そういう仕様にした理由
は、そこに書いてないと同意取れたはずだが?
なんでそんな説明をせにゃいかんのよ?

175:デフォルトの名無しさん
19/04/08 18:23:16.92 6GvfotlI.net
「性懲りもなく」...「訳してあげた」んだろ
すんげええなあ、今までさんざん無能っぷりを自ら披露しているのにw 単によくレスを見なかった人がと考えはしないのね。自分がレスをよく見ないくせにw
お前のレスはぜーーーーんぶ自分内で完結している。こんな他人と交わらない方がいいんじゃないの?
呆れ果てるな。まあ、その自己の世界で妄想ダダ漏れすればいいと思うよ

176:デフォルトの名無しさん
19/04/08 18:24:46.51 3hZl3Wdo.net
↑ほらな。俺の言ったことを否定したいだけw

177:デフォルトの名無しさん
19/04/08 18:28:18.84 6GvfotlI.net
そりゃ、否定するよ。矛盾自己肯定だらけだもの
もしかして、あんたって40超えたおっさんで外人にクソガキ呼ばわりされたことない?って気になったり。まあ、違うかw

178:デフォルトの名無しさん
19/04/08 18:34:08.77 3hZl3Wdo.net
>>117
40超えたおっさんにクソガキ呼ばわりでもされたか?w

179:デフォルトの名無しさん
19/04/08 18:34:25.94 3hZl3Wdo.net
>>117 じゃなくて >>177

180:デフォルトの名無しさん
19/04/08 18:37:29.49 6GvfotlI.net
いや、そういう(一部で有名な)有名人がいてな、あんたの属性が似すぎててな。幾つかは知らんが、あんたもそのうちそうなるだろうな
年意外同じだからw 年取ればそれが変わるわけでもないぞw

181:デフォルトの名無しさん
19/04/08 18:40:11.70 3hZl3Wdo.net
嫌いなやつはみんな一緒。思考回路が単純(笑)

182:デフォルトの名無しさん
19/04/08 18:43:03.63 6GvfotlI.net
イミフ。なんで「嫌い」とかアホなこと言っているのだか。人のふり見て我がふり直すとかあるでしょ?そういう意味だよ、そういう有名人
誰ともわからないハズなのに「嫌い」とだけの理由にできるとは...さては...ww

183:デフォルトの名無しさん
19/04/08 18:45:02.15 3hZl3Wdo.net
はいはい。話戻すぜ。
ファイルが見つからない時になぜ * を返すのか?
そういう仕様にした理由
^^^^^^^^^^^^^^^^^^^^^^
manに書いてあるそーです。やつのたわごとを信じる人は
(ネットじゃなくて)manの中から探してみてください。
信じない or 信じたけど裏切られたら、
ここにmanの場所が書かれることはないでしょう(予言)

184:デフォルトの名無しさん
19/04/08 18:46:10.94 6GvfotlI.net
・やっぱり、探せない
か... うん、なんかよかったww
じゃ、がんばれよ

185:デフォルトの名無しさん
19/04/08 18:50:10.35 3hZl3Wdo.net
>>184
安心しろ。俺以外の人も見つけられない。
だからここに俺とお前以外の人間が書くこともない。
俺が言ってることが正しければな(笑)

186:デフォルトの名無しさん
19/04/08 18:56:04.68 6GvfotlI.net
ほんと「読めないのな」。よかったはそういう意味じゃない
わざとかと思えなくもないけど、いままでの「読めなさ」からはわざとではないとしか思えない
どう見ても、お前の都合のよいことだな、さすがだよ
場所のレスもらえればお前がいままで知りたかったことがわかり、黙って逃げるだけw(そこにお前の苦悩とかなさげ)
もらえなかったら、お前の中では自己肯定の補強にになるだけとういう。間違いでもな
しょうがないな、1ヶ月後に教えてやるよw何もなかったら1ヶ月後に、この話題はw

187:デフォルトの名無しさん
19/04/08 19:02:14.14 3hZl3Wdo.net
なんなら一年後でいいんやで?w

188:デフォルトの名無しさん
19/04/08 19:09:11.60 6GvfotlI.net
イミフ。下衆い意味で言っていそうではあるがwじゃ、適当な時にな

189:デフォルトの名無しさん
19/04/08 19:20:16.01 3hZl3Wdo.net
それまで別の話題でお会いしましょう(笑)
あ、他の人、manにないのは明らかなんで探さなくていいですよ~w
時間の無駄でしょうし。

190:デフォルトの名無しさん
19/04/08 19:24:11.57 3hZl3Wdo.net
__ - ____ ________ - ___

191:デフォルトの名無しさん
19/04/08 21:48:40.20 9U0C5XME.net
>>136
bashがそういう仕様にした理由は, shにあわせたからです.
shがそういう動作をする理由は, expand()が0をかえしたときはもとの引数文字列でmakearg()するようにつくられているからです. おそらく, そういう仕様をきめてからそういう動作をさせたわけではないとおもいます.

192:デフォルトの名無しさん
19/04/08 22:28:59.33 Ejuihx1D.net
ようやくまともなレスがw
>>191
その動き(expandやmakearg)はソースコードから?
補足しておくと俺は「"bashは"なぜそうしたのか?」とは
聞いてなくて、シェルスクリプト(元をたどればsh?)が
どうしてそういう動作をするのかの理由を聞いてる。
で、それは特に理由はないのかな?たまたま最初の実装した人が
あまり考えず、そうしましたぐらいの理由で。
だから理由を探しても見つからないと

193:デフォルトの名無しさん
19/04/08 22:36:01.12 Ejuihx1D.net
まとめ
for i in *.txt; do
 echo "$i"
done
何もファイルがないディレクトリで↑を実行すると
「*.txt」 というファイルが見つかったかのような動きをします。
「*.txt」というファイルだけがあるディレクトリで実行すると
全く同じように「*.txt」 というファイル名が表示されます。
つまり空ディレクトリでも「*.txt」というファイルがあっても
表示結果が全く同じになります。これは驚き最小の原則に反しています。

194:デフォルトの名無しさん
19/04/08 22:57:42.88 b/SlAWxT.net
URLリンク(linuxjm.osdn.jp)

195:デフォルトの名無しさん
19/04/08 23:22:25.12 Ih2qq+NP.net
の、POSIXのところは
URLリンク(pubs.opengroup.org)
GLOB_NOCHECK
かな?オプション名が意図不明だが説明文からは

196:デフォルトの名無しさん
19/04/08 23:37:03.41 8H4AhNTa.net
>>194
これを読んでも同じ結論になるわけだけど
> 先に与えた、わかりやすく簡単なルール、 「ワイルドカードパターンをマッチしたパス名のリストに展開する」と言うのは、
> オリジナルの UNIX における定義であった。 これはパターンが空のリストに展開されることも許可されていた。 例えば

> において、*.gif ファイルが全くない場合でも、 これは空のリストに展開されるため、エラーにならない。
> しかし POSIX では、文法的に正しくないパターンや、 マッチがなかったパターンは、 そのまま変更されずに残されることになっている。
なぜ、わかり易く簡単なルールを捨てて、POSIXでは「そのまま変更されずに残されることになっている。 」を
選んだのかが書かれてないんだよね。

197:デフォルトの名無しさん
19/04/08 23:45:50.70 Ih2qq+NP.net
・探せたが、読めなくて文句つける
か... 探してじゃなくてっぽいけどw
書いてあることが。読めれば」>>152もわかるだろうに。どういう意味で言ったかわからん最小の原則wとかやらにあっているだろう
まあ、単に「認めたくない」だけだろな
何か他にファイルなどがあるとこで、*.hogeなんてファイルがなかったとしよう、
ls *.hoge
でどう動くのが望ましい?この例「だけ」に噛み付くのじゃなく、ちゃんと頭を使って考えような

198:デフォルトの名無しさん
19/04/08 23:50:01.35 8H4AhNTa.net
>>197
1. 見つからない場合はエラーとなってls自体が実行されない
2. ls "" とみなされる
のどちらかだろうな。
次はあんたが、頭を使ってレスしてくれなw

199:デフォルトの名無しさん
19/04/08 23:52:32.47 8H4AhNTa.net
>>197
ついでだから、ファイルが見つからない時
for i in *.txt; do
 echo "$i"
done
はどう動くのが望ましいか書いてくれよ。
今の動きや仕様を書くんじゃなくて
どう動くのが望ましいかをね

200:デフォルトの名無しさん
19/04/08 23:53:17.08 Ih2qq+NP.net
ほんとに脊髄だけで、頭使わないのな
POSIXはシェルスクリプトだけを考えてるわけではないのだよ
ls *.a *.c *.c
で、どれかがあってどれかが無い場合の動作は?よくそれで頭使ってる風に言えるもんだ。

201:デフォルトの名無しさん
19/04/08 23:54:01.05 8H4AhNTa.net
> で、どれかがあってどれかが無い場合の動作は?
>>198に書いたとおり

202:デフォルトの名無しさん
19/04/08 23:54:41.62 QfzJZ21c.net
Ruby のglob を使った方が、バグらないので良い!

203:デフォルトの名無しさん
19/04/08 23:55:27.24 8H4AhNTa.net
空のディレクトリで実行するとこうなるのかw
$ ls *.a *.c *.c
ls: '*.a' にアクセスできません: そのようなファイルやディレクトリはありません
ls: '*.c' にアクセスできません: そのようなファイルやディレクトリはありません
ls: '*.c' にアクセスできません: そのようなファイルやディレクトリはありません

204:デフォルトの名無しさん
19/04/08 23:58:38.45 8H4AhNTa.net
多分あいつは、
> この例「だけ」
のことしか考えてない予感がするなw

205:デフォルトの名無しさん
19/04/09 00:00:36.62 cRtn1aSe.net
>>202
そうだね。ファイルが見つからないときは
ちゃんと空のリストを返してくれる。
シェルスクリプトのように、「*」を返すことはないね。
irb(main):001:0> Dir.glob('*')
=> []

206:デフォルトの名無しさん
19/04/09 00:01:15.03 cRtn1aSe.net
ID変わったけど、俺が ID:8H4AhNTa な

207:デフォルトの名無しさん
19/04/09 00:01:53.02 b0dEtQwc.net
まだ、ゴネてる。自分の思ったようにならないってだけでよくそれだけ粘れるな
POSIXの仕様に意味があるのはさんざん言った。お前が認めたくないなんて知ったこっちゃない
POSIXの仕様に合わせてそんなのが動くように普通に書けるし、嫌だったらbashのオプションであんたの好きにできるだろうに
>>201
ls: : No such file or directory
ls: : No such file or directory
ls: : No such file or directory
って、出て来るのが望ましいのね
ls: *.a: No such file or directory
ls: *.b: No such file or directory
ls: *.c: No such file or directory
POSIXの人も俺と同じだと思うよw
>>203
イミフ。なにを言いたいの?
なんで、いちいちいちいちいちいち説明教えなきゃならいないねん

208:デフォルトの名無しさん
19/04/09 00:12:14.14 cRtn1aSe.net
>>207
この質問は無視?
for i in *.txt; do
 echo "$i"
done
はどう動くのが望ましいか書いてくれよ。

209:デフォルトの名無しさん
19/04/09 00:12:42.47 cRtn1aSe.net
>>207
やっぱりlsの例だけしか考えてないようだね

210:デフォルトの名無しさん
19/04/09 00:15:06.05 b0dEtQwc.net
その例だけなら、回らないのが望ましいだろな。だが、POSIXはシェルスクリプトだけを考えてるわけではないからしょうがないうちだろな
で?

211:デフォルトの名無しさん
19/04/09 00:16:54.68 b0dEtQwc.net
>>209
何を言いたいのかわからんな。どゆこと?まさか「正確」と同じパターンじゃないよな?その気しか思えないので具体的に言って

212:デフォルトの名無しさん
19/04/09 00:18:30.84 cRtn1aSe.net
ついでにPHPの場合
$ php -r "print_r(glob('*'));"
Array
(
)
Perlの場合
perl -MData::Dumper -e 'print Dumper [glob "*"]'
$VAR1 = [];
Rubyと同じく、見つからない場合は
デフォルトでは空のリストが帰ってくる。

213:デフォルトの名無しさん
19/04/09 00:19:17.64 cRtn1aSe.net
>>210
さっきから
> POSIXはシェルスクリプトだけを考えてるわけではないから
を繰り返してるけど、シェルスクリプト以外とは何の話をしてるの?
そして、シェルスクリプト以外ではどうだって言いたいの?

214:デフォルトの名無しさん
19/04/09 00:20:20.88 cRtn1aSe.net
>>211
だからお前、"lsの場合では" *だったらエラーがわかりやすいって言ってるだけじゃん。
forの場合では、当てはまらないじゃん。

215:デフォルトの名無しさん
19/04/09 00:20:53.10 b0dEtQwc.net
>>213
マジか...

216:デフォルトの名無しさん
19/04/09 00:21:12.57 cRtn1aSe.net
>>215
逃げるなよ

217:デフォルトの名無しさん
19/04/09 00:24:19.08 b0dEtQwc.net
>>214
ああ、なんだ「シェルスクリプト」の(それも特定な)場合か。「ls」なんて言ってるから他のコマンドとかと思ったぞ
POSIXはシェルスクリプトだけを考えてるわけではないからw
話にならない、POSIXを勉強して出直してね

218:デフォルトの名無しさん
19/04/09 00:24:33.50 cRtn1aSe.net
C言語めんどくせーなーと思ったら、サクッとソースコード見つかった。
URLリンク(qiita.com)
↑のコードの ./*.txt を * に変換したけど、
やはり、空のディレクトリで * と表示されることはなく
何も表示されなかった。
POSIXってほんと何を言いたいんだろう?

219:デフォルトの名無しさん
19/04/09 00:25:50.97 b0dEtQwc.net
>>216
逃げるも何も「文句をつける対象を理解してない」のにどう相手をすれと?あんたにこれ以上こまごまこまごま教えてなきゃならんのか?
だったら、逃げるよ

220:デフォルトの名無しさん
19/04/09 00:26:21.07 cRtn1aSe.net
POSIXはシェルスクリプトだけを~とか、じゃあC言語のことなんですかねぇ
でもC言語でも空のディレクトリで * が返ってくることはないし
ほんと何が言いたいんだかw

221:デフォルトの名無しさん
19/04/09 00:27:47.89 cRtn1aSe.net
POSIXはシェルスクリプトだけを考えてるわけではないから
→ Ruby・・・空の配列を返す
→ Perl・・・空の配列を返す
→ PHP・・・空の配列を返す
→ C言語・・・空の配列を返す
シェルスクリプト以外は空の配列を返します。

222:デフォルトの名無しさん
19/04/09 00:28:27.37 b0dEtQwc.net
>>218,220
はあ...最後な
>>194,195をよーく読め。なんでそれがbashでになってるのかも

223:デフォルトの名無しさん
19/04/09 00:29:23.15 b0dEtQwc.net
以後、脊髄反射マンと呼ぶからなw

224:デフォルトの名無しさん
19/04/09 00:29:27.03 cRtn1aSe.net
>>222
またそれか。よく読んでも、そうした理由は書いてない。

225:デフォルトの名無しさん
19/04/09 00:29:47.10 cRtn1aSe.net
>>223
脊髄反射マン必死だなw

226:デフォルトの名無しさん
19/04/09 00:31:21.79 b0dEtQwc.net
Supports rule 3 in the Shell and Utilities volume of IEEE Std 1003.1-2001, Section 2.13.3, Patterns Used for Filename Expansion.

227:デフォルトの名無しさん
19/04/09 00:32:12.65 b0dEtQwc.net
>>225
モロ体現してありがたい。オモロイなあんたは

228:デフォルトの名無しさん
19/04/09 00:32:37.61 cRtn1aSe.net
>>226
何度も言ってるが、
俺が聞いているのは、そういう仕様にした"理由"であって
仕様の場所は聞いてはいない。
ほんと、脊髄反射しかしねーなw

229:デフォルトの名無しさん
19/04/09 00:34:36.17 b0dEtQwc.net
>>228
言っているけど。「読めれば」そう書いてあるんだけどな。「読めない読めない」言われてもしょうがない
あんただって、「空」だったらマズいときもあるって認めてるやん
本当にただただ「認めたくない」だけなんだな。その「コロ」っとあんたの原点に戻るあたり
まあ、がんばりや

230:デフォルトの名無しさん
19/04/09 00:35:06.66 cRtn1aSe.net
そして面白いのが、シェルスクリプトは glob で見つからない場合に
検索パターンを返すのに対して、シェルスクリプト以外では
見つからない場合に、空のリストを返すって所だな。

231:デフォルトの名無しさん
19/04/09 00:37:41.48 cRtn1aSe.net
>>229
お前、マズイときもあるし、マズくない時もあるって
自分で認めてるやんw
ということはお前の主張は、所詮マズイときの例でしかなく
マズくない時には当てはまらないってことになるんだぞ
わかってるのか?お前の主張が崩れてるの
で、シェルスクリプト以外は空のリストを返しているのに
シェルスクリプトだけは、見つからなかった時に * という
文字列を返すという仕様にした理由は?

232:デフォルトの名無しさん
19/04/09 00:39:30.00 cRtn1aSe.net
結局、一番マトモな理由は >>191が書いた
> おそらく, そういう仕様をきめてからそういう動作をさせたわけではないとおもいます.
これだけなんだよな。特に理由はない。
(深く考えずに)そうしてしまった。
もちろん、正式なドキュメントとして
この理由が、書かれている文書は見つかってないがね。

233:デフォルトの名無しさん
19/04/09 00:42:08.93 cRtn1aSe.net
あ、みなさん。もし ID:b0dEtQwc を擁護したい人がいるならば
ID:b0dEtQwc が示したドキュメントの中から、
「そういう仕様にした"理由"」を書いてある所を指摘して構わないんですよ?
ないでしょう? 誰も指摘しないもんね。それが証拠だよ。

234:デフォルトの名無しさん
19/04/09 00:42:13.89 b0dEtQwc.net
何言っているの?
>この仕様、なにか便利なの?
が、お前の原点だろ?それ以後「認めなたくない」のであーだこーだ言っているだけだな

235:デフォルトの名無しさん
19/04/09 00:43:58.23 b0dEtQwc.net
とうとう誰とも言えない人に頼るようになったか...ww

236:デフォルトの名無しさん
19/04/09 00:46:08.72 cRtn1aSe.net
>>234
ちゃんと流れを読むように
107 自分:デフォルトの名無しさん[sage] 投稿日:2019/04/04(木) 17:59:04.72 ID:opkeFDjY [4/21]
>>104
聞いてるのは仕様ではなくて、
どうしてそうしたかの理由です。

237:デフォルトの名無しさん
19/04/09 00:50:22.73 b0dEtQwc.net
>>236
流れというかレスを読めないあんたに言われたくないw
いや、原点の話でしかないな。あんたの都合に(それもあんたの都合の良いようになだけな)合わせる必要性はこれっぽちもないな
とりあえず、原点の問題は解消した&マズい場合もあるそれが理由ってことも解消したってことで、おしまい

238:デフォルトの名無しさん
19/04/09 00:51:41.47 cRtn1aSe.net
URLリンク(linuxjm.osdn.jp)
> において、*.gif ファイルが全くない場合でも、 これは空のリストに展開されるため、エラーにならない。
> しかし POSIX では、文法的に正しくないパターンや、 マッチがなかったパターンは、 そのまま変更されずに残されることになっている。
> bash では、次のコマンドで昔からの振る舞いに設定することができる。
>
> shopt -s nullglob
なぜ昔からの振る舞いから替えたのか?その理由が謎
(理由を明確に述べているドキュメントがない)

239:デフォルトの名無しさん
19/04/09 00:52:47.78 cRtn1aSe.net
>>237
おしまいなんで、あんたは消えていいです。
1ヶ月後にちゃんと答えてください(笑)

240:デフォルトの名無しさん
19/04/09 00:54:45.59 cRtn1aSe.net
> POSIXはシェルスクリプトだけを考えてるわけではないから
↑これも結局何が言いたいのか不明だったな
まあ、何も考えずに(調べずに)シェルスクリプト以外の言語でも
* を返してるはずだって思い込んだんだろうなw
(実際には見つからない場合は空のリストを返します。)

241:デフォルトの名無しさん
19/04/09 01:01:34.97 b0dEtQwc.net
なにか勝ち誇って妄想全開のようだが、全然違う
>>195をよく読もうな。>>226と注目すべきとこあげたのに
他の言語でもglobなんて自ら実装したりはしないんじゃないの。単にそのオプションがデフォルトでは設定されていない、オプションが設定できるのは設定すれば同じになるんじゃないの。妄想お疲れさん

242:デフォルトの名無しさん
19/04/09 01:09:06.87 cRtn1aSe.net
> POSIXはシェルスクリプトだけを考えてるわけではないから
↑これで何が言いたいのかを書けば済む話
それが出来ないのはなぜだろうw

243:デフォルトの名無しさん
19/04/09 01:09:51.04 cRtn1aSe.net
あ、ちなみに「注目すべきとこ」には何も書いてませんよ。
いつもどおりです。

244:デフォルトの名無しさん
19/04/09 01:15:27.47 b0dEtQwc.net
ほんとーーにっ、「読めない」のな、この脊髄反射マンっw

245:デフォルトの名無しさん
19/04/09 01:16:58.07 cRtn1aSe.net
読めないって言わずに、具体的に引用すればいいだけなのに
それをしないのは、結局引用する場所がないからなんだよね

246:デフォルトの名無しさん
19/04/09 01:23:40.88 b0dEtQwc.net
「無い」から「引用できない」に変わったけど、同じパターンやな。そして前言はなかったことにという前々からの同じパターン

247:デフォルトの名無しさん
19/04/09 01:25:22.47 cRtn1aSe.net
>>246はとりあえずレスしてみましたってだけで
中身がなにもないことに、皆さん気づきましたか?

248:デフォルトの名無しさん
19/04/09 01:26:56.18 b0dEtQwc.net
なんか少しは自分を見直すとかあって、ここでもこんなクソ(俺のも含めて)なレスの応酬もなく、見てためになる万人が楽しめるレス、Q&Aになるかと思ったが、無理かやっぱ(偉そう偉そう)
そりゃ無理かっ。なんか急に飽きた、じゃな

249:デフォルトの名無しさん
19/04/09 01:29:05.84 cRtn1aSe.net
はい、コイツは何度目かの逃亡宣言です。
また懲りずに来ますよw

250:デフォルトの名無しさん
19/04/10 08:51:10.36 1CG1Z7Gt.net
bashの算術計算で小数を使う方法ってないです?
+=で加算したいんですが

251:デフォルトの名無しさん
19/04/10 12:14:47.90 sSiaigIF.net
>>250
それ俺も欲しいんだよね。
前にやった実装は、小数点以下2位固定だったから
1.23 を 123 にして計算してから、後ろ2桁の間にドットを入れて対応したけど
小数点以下の桁数が1.2とか1.234とかだったら面倒なんだよね。
bcコマンドとか呼び出せば簡単なんだが。

252:デフォルトの名無しさん
19/04/11 17:03:23.97 bMTFn+JP.net
exec 3>&1; exec >&-; exec >&3
たまにこんなのを見ますがこれはどんな時に使うんです?
ファイルディスクリプタ自体は理解しましたがfdの複製や切り替える目的が分からなくて
cmd 2>err.txtは意識せず使えてますが

253:デフォルトの名無しさん
19/04/11 17:46:50.14 cVfQRf/N.net
>>252
不勉強なんで「3」ってfdは知らないんだけど、「>&」ってリダイレクトを
使うと書き込みじゃなくて切替になるんだけど、これを使うとエラー
出力を標準出力に切り替えて標準出力で両方の出力を得たりする
ことができるです
「Command > FileName 2>&1」ってするとエラー出力の内容が標準
出力になってFileNameに両方の内容が書き込まれる
逆に「Command 2> FileName 1>&2」ってすると標準出力がエラー
出力になっるので、エラー出力でFileNameに書き込むことが出来る
で、何に使うのかっていうと、「grep」なんかは検索結果は標準出力に
でるけど「指定されたのはディレクトリだよ」みたいなメッセージは
エラー出力に出される
両方の出力をみて処理したいとかの時にはこれで切り替えて標準
出力の内容を変数に保存しておいて処理するとかに使うです
例が雑でわかりにくいかもだけど、エラーと通常の出力を同じ出力で
使う方法ってことで、あとはスクリプトなんでアイデアしだいなんで

254:デフォルトの名無しさん
19/04/11 23:20:48.83 smzX9gsy.net
>>252
URLリンク(tldp.org)

255:デフォルトの名無しさん
19/04/12 00:07:43.92 XpqpR76r.net
>>252 はリダイレクトを知りたいんじゃなくて、fd=1 を 3 にコピーして 1 をクローズして再度 3 から 1 にコピーする意味
が何なのかを質問しているんだと思う。
結局もとのファイルに繋ぎなおすだけだよね。
一旦クローズするから flush されるとか?ならわかるんだが、実際どうなのかわからん。

256:デフォルトの名無しさん
19/04/12 00:45:21.11 L59U/aC1.net
ファイルディスクリプタに関しては
逆引き辞書が必要なんだと思う
○○をしたい時 → こうします。っていうやつ

257:デフォルトの名無しさん
19/04/12 03:08:23.09 WO5SLys3.net
ファイルディスクリプタ(FD) 3番からは、システムが使うけど、ユーザーも使うことができる。
FD0 : 標準入力、FD1 : 標準出力、FD2 : 標準エラー出力
端末に、ls と打つと、
1. シェルが、lsコマンドのプロセスを起動して、それに、FD0~2 を渡す
2. lsプロセスは、FD3 を使って、ファイル一覧を作って、FD1 に出力する
主なFD3 の使用方法は、標準入力を、ファイル・キーボードの2つで、切り替えて使いたい時
標準入力をファイルからにすると、キーボード入力が出来なくなるため、
一旦、標準入力(FD0)をFD3 にして、ファイルから入力して、済んだら元に戻す
こんな事を一々、シェルスクリプトでやるよりも、Ruby でやればよい。
FD何番を使っているとか、意識せずにすむ

258:257
19/04/12 04:14:55.73 WO5SLys3.net
exec 3<&0 < a.txt # FD3 から入力
while read LINE
do
echo "--- ${LINE} ---"
done
exec 0<&3 3<&- # 標準入力を元に戻し、FD3 を閉じる
# 上のようにも書けるが、下の方が、標準入力のファイルディスクリプタ(FD)0 をいじらないので、安全
exec 3< a.txt
while read LINE 0<&3 # FD3 から入力
do
echo "--- ${LINE} ---"
done
exec 3<&- # 閉じる
「UNIX シェルスクリプト・コマンドブック 第2版、山下哲典」の、exec の説明の所に書いてある。
第3版には載っているかどうか、知らないけど

259:デフォルトの名無しさん
19/04/12 13:25:25.09 L59U/aC1.net
もう少しまともに説明できるやついないのかな・・・

260:デフォルトの名無しさん
19/04/12 13:27:28.90 I415couP.net
宿題は自分でやろうな

261:デフォルトの名無しさん
19/04/12 16:22:09.16 zYICSkfs.net
CTRL+Cのトラップについて教えて
以下のスクリプトの時、実行してすぐにCTRL+Cを押すと
#!/bin/sh
set -e
sigint() { echo sigint; }
trap 'sigint' INT
#trap 'echo $?' EXIT
sleep 10
こんな感じでバラバラなんだけどさ
dash・・・トラップできない。終了コード130
(ただしコメントアウトしてるEXITのtrapを有効にするとトラップできる)
bash・・・トラップできる。終了コード130
zsh・・・トラップできる。終了コード130
ksh・・・トラップできない。終了コード130
(コメントアウトしてるEXITのtrapを有効にすると258と表示される。トラップできず)
mksh・・・トラップできる。終了コード0
(コメントアウトしてるEXITのtrapを有効にすると0と表示される。トラップできる。)
posh・・・トラップできない。終了コード130
(ただしコメントアウトしてるEXITのtrapを有効にするとトラップできる)
yash・・・トラップできる。終了コード130
(コメントアウトしてるEXITのtrapを有効にすると386と表示される。トラップできる。)
なんでこうなって、どれが正しい動きで、どれでも同じ動きさせるには、どうすりゃいいの?

262:デフォルトの名無しさん
19/04/12 16:46:27.11 2vVcl4ag.net
宿題は自分でやろうな

263:デフォルトの名無しさん
19/04/13 06:04:26.25 blG/UTRx.net
Ruby では、カスタムハンドラを定義した場合、終了しない。
デフォルトのままなら、Ctrl+C で終了する
つまり、デフォルトハンドラから、カスタムハンドラへ付け替えたため
sleep 7 #=> ここではデフォルトハンドラだから、Ctrl+C で終了する
previous_handler = Signal.trap( :INT ) do
puts "シグナルハンドラへ入った!"
end
print "previous_handler = "
p previous_handler #=> "DEFAULT"
sleep 7 #=> ここでは、カスタムハンドラへ付け替えたので、終了はしない

264:デフォルトの名無しさん
19/04/13 06:40:14.96 mImzJn5T.net
それはシェルスクリプトも同じだろうな。上の終了しているのは set -e しているからじゃないのかな
シェルスクリプトは子プロセスを起動していてシグナルを受けるのが子プロセスでが多くタイミング的に~以下省略

265:デフォルトの名無しさん
19/04/13 07:34:12.37 bIdtQ5MW.net
> set -e しているからじゃないのかな
それをわかってるから、サンプルコードにも入れてるんだけどねw
問題はそこじゃなくて、なんでシェル毎に挙動違うんだよ!?
どれが正しいんだよ!?という話なわけで

266:デフォルトの名無しさん
19/04/13 07:57:58.58 i5T2wQ7z.net
CTRL-Cを入力するタイミングが下手すぎるって話だろ
まさか手入力じゃあるまいな?

267:デフォルトの名無しさん
19/04/13 08:08:06.94 bIdtQ5MW.net
>>266
手入力しないでやる方法を教えてくれ!

268:デフォルトの名無しさん
19/04/13 08:08:38.43 bIdtQ5MW.net
いやkill使うのは知ってる。それをどういう風に使えば、
手入力と全く同じことを再現できるのかという話だ。

269:デフォルトの名無しさん
19/04/13 08:12:44.72 bIdtQ5MW.net
2つの端末を使って一方で実行してから
もう一方で(手入力で)実行するっていうのは
結局手入力してるのと変わらないし、
1つのスクリプトでkillすると、
それこそわけわからんことになる。
イベントハンドラ内でkillするか、違う場所でkillするか
シェルによって挙動が違う

270:263
19/04/13 08:51:59.71 blG/UTRx.net
Ruby では、
previous_handler = Signal.trap( :INT ) do
puts "シグナルハンドラへ入った!"
end
print "previous_handler = "
p previous_handler #=> "DEFAULT"
# 自プロセスへシグナルを送ると、カスタムハンドラが呼ばれるが、終了はしない
Process.kill :INT, Process.pid
Signal.trap( :INT, previous_handler ) # 元のハンドラへ戻す
sleep 7 #=> ここでは、デフォルトハンドラへ戻したので、Ctrl+C で終了する
「改訂2版 Ruby逆引きハンドブック」では、もっとややこしい記述をしてる
シグナルハンドラはグローバルだから、
他のスレッドに変更されないように、Mutex で排他制御してる

271:263
19/04/13 09:02:30.89 blG/UTRx.net
シングルスレッドでは、sleep 7、としてる間に同時に、
Process.kill :INT, Process.pid
と、自プロセスの命令を実行できない
マルチスレッドなら出来るのだろうが、マルチスレッド・プログラミングはややこしい!

272:デフォルトの名無しさん
19/04/13 09:27:42.11 bIdtQ5MW.net
>>271
マルチスレッドのほうが楽だな。
それらをマルチプロセスでやってくれ。
子プロセスは自分で作成したものだけじゃなくて
既存のプログラムも使い、バックグラウンドプロセスも使ってみること

273:デフォルトの名無しさん
19/04/13 09:36:25.97 bIdtQ5MW.net
zshの謎な挙動はこれが原因か?
URLリンク(fumiyas.github.io)
> でました、zsh の非互換! zsh はシグナルハンドラー※内で終了すると、 EXIT ハンドラーを実行してくれません。酷い。 (※この例では SIGINT のデフォルトのシグナルハンドラー)
> こんな感じで bash, ksh, zsh には微妙な動作の違いがあったりするので、 ちょっと変わったことしようとするときは特に注意しましょう。

274:デフォルトの名無しさん
19/04/13 09:39:48.45 bIdtQ5MW.net
読みづらいなw
$ zsh -c '
atexit(){ echo "Bye!"; };
trap atexit EXIT;
trap "trap - EXIT; atexit; exit -1" TERM;
kill -TERM $$
'

275:デフォルトの名無しさん
19/04/13 11:31:16.12 6byp94bf.net
全てのシェルで適切に終了処理をするって難しいな・・・

276:263
19/04/13 11:39:28.75 blG/UTRx.net
Ruby で、at_exit に、終了処理を書いておけばよい
シェルスクリプトで、書く必要がない

277:デフォルトの名無しさん
19/04/13 11:55:58.29 6byp94bf.net
時たま出来てしまうゾンビは何が原因なんだろう?
kill -TERM 0 してるから全部死んでくれるはずなんだが・・・

278:デフォルトの名無しさん
19/04/13 11:57:21.41 6byp94bf.net
あ、バックグラウンド処理とかしてる
そしてCTRL-Cで強制終了した時の話
ゾンビだから消せなくて困る

279:デフォルトの名無しさん
19/04/13 13:02:33.69 blG/UTRx.net
ゾンビは、子プロセスが終了して、
OS が、その終了コードをどう扱えば良いのか、わからないから、ひとまず保存している状態
普通なら、子プロセスの終了コードは、親プロセスへ渡されるのかな?
ゾンビが生まれた時に、親プロセスがどうなっているのか?

280:デフォルトの名無しさん
19/04/13 14:09:25.74 mImzJn5T.net
>>265
お前には言ってない
>>266
タイミング的に子プロセスが受け取るのかシェルが受け取るのかってことなんだけどね。コマンドを実行中なのかシェルが実行中なのか
set -e を使うからややこやしい、シグナルの基本をわかってないんじゃないんだろなとしか思えんけど。コマンドがINTシグナルで終了した場合、シェルが擬似的にシグナルハンドラ呼んでるっぽいかな(もしくは自らにINTシグナル出してるのかな?)
何したいのか知らんけど、set -e 使わずに、INTシグナルハンドラでexitすればいいんじゃないの

281:デフォルトの名無しさん
19/04/13 14:29:06.39 6byp94bf.net
>>279
その理屈はわかるんだけどねぇ
まず必ずゾンビになるんじゃなくてたまになる。だからタイミングの問題
CTRL-Cを押した時になる。通常の処理では発生しない。
CTRL-Cのハンドラでは作業ディレクトリの削除を行っている。
ワーカー(& によるバックグラウンド処理)が複数ある。サブシェルを使ってるせいか
同じな名前のプロセスがたくさんいる。ワーカーを生成した後はwait(引数なし)を実行している。
ゾンビの存在は確認しているが、誰がゾンビになったのかその親が誰かはよくわかっていない。
(たまにしかならんので探しにくい)ただし内部で呼び出してるtrやmvがゾンビになったこともある。
CTRL-Cのハンドラでは作業ディレクトリの削除の他、多数生きてるワーカー(労働者)を
皆殺しにするためにジェノサイド(kill -TERM 0)を発動している。
ただし労働者を消した後に、労働者の作業場(作業ディレクトリ)も片付ける
必要があるので自分だけは死なないようにしている。(trap ':' TERM)
実際にはもっと複雑だけど、死なないのは自分だけなはずなんだけどな
バグでゾンビになったこともあるので記憶が曖昧だけど
(バグを修正した今は)zshだけしか発生しなくなっているかもしれない。
もしかしたらzsh内蔵のkillにバグがあって殺す順番とか
子供が生まれるタイミングで発生してるとか?
でもまあなんだかんだでシンプルにしていったら
ゾンビの発生率も下がってきたし諦めるかな

282:デフォルトの名無しさん
19/04/13 14:40:48.63 6byp94bf.net
うーん、おかしい。trってワーカー(バックグラウンドプロセス)の
中で使っているとはいえ、パイプの右側でしか使ってないんだが?

283:279
19/04/13 15:17:27.06 blG/UTRx.net
漏れにも、ゾンビになるプログラムとならないプログラムの、違いがわからない
ゾンビになるメカニズムを検索してみれば?

284:デフォルトの名無しさん
19/04/13 15:21:25.04 6byp94bf.net
「ゾンビになるメカニズム」で検索してみた
管理テーブルにデータが残ってるだけなら
消す方法(もしくは隠す方法)があってもいいと思うんだがねぇ

285:デフォルトの名無しさん
19/04/13 16:27:29.48 i5T2wQ7z.net
>>284
wait()すりゃいいんだよ。
普通はinitが拾ってくれるんだが、誰にでも好き嫌いはあるということだろう。

286:デフォルトの名無しさん
19/04/13 16:33:30.75 mImzJn5T.net
>>280
>コマンドがINTシグナルで終了した場合、シェルが擬似的にシグナルハンドラ呼んでるっぽいかな(もしくは自らにINTシグナル出してるのかな
違うか。control-cでのINTシグナル送るやつの文献ってどこぞにあるかなあ

287:279
19/04/13 17:05:08.41 blG/UTRx.net
Ctrl+C が、子プロセスやパイプラインのジョブグループに、
どのように伝達されていくかとか、難しい

288:デフォルトの名無しさん
19/04/13 17:21:22.57 6byp94bf.net
いろいろ間違っていた。訂正する。
まずCTRL-Cは関係なさそう。実は正常な動作でも(プログラム実行中に)ゾンビができることがあった。
ゾンビができると今は無限ループ状態になるので気づいたが、ちょっと前まではプログラムの構造上、
ゾンビを放置して正常終了していたと思う。zshではあまりテストしていなかったから気づかなかった。
バックグラウンドプロセスが関係あるかないかはよくわからない。
何回か動かしているがバックグラウンドプロセスを使用しない場合は今の所再現していない。
あとなんかWSLとのからみな気がしてきた。
速度が違うから断定は出来ないがLinuxだと再現しない。
今の所、WSL環境にて、zshで、バックグラウンドプロセスを使用し、
その中でパイプを使った処理を行うと、まれにゾンビプロセスができる。

289:デフォルトの名無しさん
19/04/13 17:27:02.88 i5T2wQ7z.net
>>286
シグナル一般の話ではなくてttyの話だったら、詳解Unixに載ってた気がするが、
当然そのくらいは読んでるよね。

290:デフォルトの名無しさん
19/04/13 17:36:42.95 mImzJn5T.net
>>287,289
なるほど
すまん、読んでない。遠い記憶では読んでいたような気もするが忘れたので読んでない

291:デフォルトの名無しさん
19/04/13 17:43:50.87 6byp94bf.net
再現コード出来た。このコード、なにか問題有る?
これをWSL+ZSHで実行すると、人目につかず永遠とbcコマンドで1+1を計算し続け、
CTRL-Cで停止するときにbcコマンド含めたプロセスグループ全体をkillする(はず)
これをやるとbcコマンドがゾンビ化する。(Linuxだとしない)
#!/usr/bin/zsh
int() {
echo kill
kill -TERM 0
echo killed
exit 1
}
trap 'int' INT
trap ':' TERM
worker() {
while :; do
echo '1+1' | bc > /dev/null
done
}
for i in $(seq 16); do
worker &
done
echo wait
wait

292:デフォルトの名無しさん
19/04/13 17:44:42.87 6byp94bf.net
やっぱり詳解Unixは買わねばいかんか・・・

293:デフォルトの名無しさん
19/04/13 17:54:41.69 6byp94bf.net
dash、bashでは再現しない。kshでも再現した。
いずれもWSLのみ。これもうWSLの問題だろ・・・
きっとWSLのバグをzshとkshが踏んじゃったんだな

294:デフォルトの名無しさん
19/04/13 17:55:48.18 6byp94bf.net
これ関連してるのかな?
Why are there many zombie process in windows subsystem for linux(WSL)? How to kill them totally?
URLリンク(superuser.com)

295:デフォルトの名無しさん
19/04/13 18:09:57.29 6byp94bf.net
次のWindows 10のリリースで治ってんじゃないですかねー
もういいか
Zombie zsh processes left behind that consume 8 % CPU each
URLリンク(github.com)
Killing a defunct zombie leaks the zombie process forever
URLリンク(github.com)
URLリンク(docs.microsoft.com)
Fix issue where zombie process may not be reaped and remain indefinitely.

296:デフォルトの名無しさん
19/04/14 14:12:09.49 uU4FE3J6.net
read -r text <<HERE
printf [%s]\n it's a "s'm'a'l'l 'w"o'r"l'd"
HERE
$text
↓出力
[it's]
[a]
["s'm'a'l'l]
['w"o'r"l'd"]
この仕様、うまくすればなにかに使えそうな気がしている。
文法エラーにもならずevalとはまた違った挙動だ。
とゆうかどういう仕様なんだろう?

297:デフォルトの名無しさん
19/04/14 17:50:16.12 21MN1CXY.net
$ cat b.pl
#!/usr/bin/perl -w
print("$_\n") foreach @ARGV;
$ cat c.sh
#!/bin/bash
IFS=+
./b.pl a b c
./b.pl a+b+c
while read -r v ; do $v ; done <<EOF
./b.pl a b c
./b.pl+a+b+c
EOF
$ ./c.sh
a
b
c
a+b+c
./c.sh: 行 6: ./b.pl a b c: そのようなファイルやディレクトリはありません
a
b
c
$ # うん、なかなか面白いね。どうしてこうなるかは man に書いてあるよ。
$ # 簡単に言うと、単語の分割というのは最初に行われるものと
$ # 変数が展開された後に行われるものがあるんだ。
$

298:デフォルトの名無しさん
19/04/15 17:41:03.59 ZXb+3x2v.net
シェルスクリプト(対話操作含め)が実行される手順って結構複雑な割に他の言語よりずっと単純だから
理論から実践(この場合はシステム処理とか?)への、かなり良い足掛かりになるよね。

299:デフォルトの名無しさん
19/04/21 01:20:29.51 Has+aDs1.net
URLリンク(www.sample)
これが書かれたtxtを読み込んでブレース展開して出力する方法ないです?
$ printf "%s\n" < foo.txt
適当にこうやっても上手く行かなくて

300:デフォルトの名無しさん
19/04/21 01:26:56.31 S3Y2FMky.net
ないです

301:デフォルトの名無しさん
19/04/21 01:40:13.99 0pnJkrzy.net
eval $(echo -n 'echo '; cat foo.txt) とか?

302:デフォルトの名無しさん
19/04/21 02:15:47.05 FhppS/ri.net
sh << END
printf "%s\n" $(cat foo.txt)
END

303:デフォルトの名無しさん
19/04/21 02:24:15.12 FhppS/ri.net
echo "printf '%s\n' $(cat foo.txt)" | sh
でよかった

304:デフォルトの名無しさん
19/04/21 08:49:56.51 Hx8930Ug.net
eval 'echo '$(<foo.txt)

305:デフォルトの名無しさん
19/04/21 10:59:40.33 Has+aDs1.net
>>304
内側のリダクレクトが何かと思えば $(cat file)の変形があったとは
複数行も対応してるしこれなら行けそうですわ

306:デフォルトの名無しさん
19/04/21 12:47:47.19 Hx8930Ug.net
ごめん、もうちょっとシンプルに書けた。
eval echo $(<foo.txt)

307:デフォルトの名無しさん
19/04/22 02:03:07.74 KyfckjPA.net
>>306
これいいね!
……正直,実際に使う機会は少なそうだけど
シェルの処理をしっかり把握してないと思い付かない回答。

308:デフォルトの名無しさん
19/04/22 11:54:54.98 c8JzoHXu.net
例えばさ、
bash -n -c 'a=(a b c)'
↑これはbashとして正しい文法だけどさ
sh -n -c 'a=(a b c)'
↑これは文法エラーになるじゃん? 実行していなくても
これみたいに、実行してないのにあるシェルではOKで
別のシェルではNGみたいな文法って他に何かしらない?

309:デフォルトの名無しさん
19/04/22 12:22:26.76 KyfckjPA.net
>>308
君と似た例ではあるが;
$ bash -n -c '%=a'
$ sh -n -c '%=a'

310:デフォルトの名無しさん
19/04/22 15:47:58.78 8XF5nS5J.net
eval 'printf "%s\n" '$(cat foo.txt)
これprintfをシングルクォートで囲まないと改行されないのね
URLリンク(www.sample)みたいな結果ばかりでちょっと悩んだ
zsh使ってないけどこれはforの後の二重括弧に空白が必要だとかなんとか
{には空白がいるのにfor((が通るbashの方が不自然なのか

311:デフォルトの名無しさん
19/04/22 18:28:36.64 i3ajZQCG.net
export -p と export の違いってなに?

312:デフォルトの名無しさん
19/04/22 18:36:38.02 oyNQbI7u.net
\n の処理をだれがいつやらかすのかってとこかな。printfにやらせたいprintfに \n のまま渡さなくてはという感じ
eval printf "'%s\n'" $(cat foo.txt)
eval printf '%s\\n' $(cat foo.txt)

313:デフォルトの名無しさん
19/04/22 23:58:52.60 htDMK2AO.net
そもそもなぜ eval を使うのかというと、コマンドラインの解釈において
ブレース展開がコマンド置換より前だから
コマンド置換してからブレース展開するためには
eval を使って解釈を最初からやり直す必要があるためで
しかしながら printf と "%s\n" にはその必要がないのだから、つまり
printf "%s\n" $(eval echo $(<foo.txt))
でいいんじゃないかな。

314:デフォルトの名無しさん
19/04/23 08:44:15.00 q7kwqzjj.net
ダブルクリックで実行できるのとできないシェルスクリプトの違いって一体
whileとcaseで簡易メニュー作ってたんだけどダブルクリックしても画面に何も出ない上に
起動されたbashがCPUがかなり食ってた
無論端末から実行はしっかり通る
ls結果を外部保存するような単純な奴はダブルクリックでも正常通りなんだけど

315:デフォルトの名無しさん
19/04/23 13:31:54.32 zhMneqp1.net
シェルスクリプト関係ない

316:デフォルトの名無しさん
19/04/23 18:19:48.00 /EY0Mv6x.net
>>311
マニュアル嫁
つーか実行すれば一目瞭然だぞ
……と思ってやってみたらexportはオプション成しで起動すると
export -pと同じ動作をするんだね

317:デフォルトの名無しさん
19/04/23 18:22:18.78 /EY0Mv6x.net
>>314
使ってるGUIシステムがX11なら
x-terminal-emulatorなんかを使って仮想端末を立ち上げてからじゃないと
メニューみたいな端末出力を必要とするものは期待した通りに動かないよ。

318:デフォルトの名無しさん
19/04/23 20:23:01.28 zVNwrrWL.net
>>316
そうマニュアルに書いてあるだろう。なんのボケ?w

319:デフォルトの名無しさん
19/04/23 21:51:37.02 zhMneqp1.net
模範解答
export -p がどう表示されるかはPOSIXで規定されていますが、
export がどう表示されるかは未定義です。(同じとは限りません)
つまり、exportがどうなるかはシェル毎に異なります。
URLリンク(pubs.opengroup.org)
更にexport -pはbashではPOSIXに反してdeclareで表示されます。
これらは各シェルのマニュアルには書いていません。

320:デフォルトの名無しさん
19/04/23 22:49:27.06 /EY0Mv6x.net
模 範 解 答

321:デフォルトの名無しさん
19/04/24 08:22:12.86 6O+4Q2Ek.net
bashで abc*が展開できると出来ないときがあって
それをテストするのに
[  "abc*" = 'abc*' ]
とやりたいのにできません
どうやったらできますか?

322:デフォルトの名無しさん
19/04/24 17:25:06.62 bQUFU5ml.net
>>321
何がどうできないのかよく分からないけどシングルクォートとダブルクォートは
処理が違うから「=」にならないと思うよ
シングルクォート側は文字列なので「abc*」っていう文字列になるけど
ダブルクォート側は解釈されるので「*」にあたるものが存在しないと何もない
状態なので「abc」って文字列になるんじゃないかな

323:デフォルトの名無しさん
19/04/24 17:40:21.19 uakSx5ac.net
は?

324:デフォルトの名無しさん
19/04/24 17:42:31.98 6O+4Q2Ek.net
abc*が展開できない時はそのままabc*になるのでそう思って書いてみました

325:デフォルトの名無しさん
19/04/24 18:28:22.30 6T3A9gnL.net
abc* というファイルが実際にあるというというのは除外でいいのね?

326:デフォルトの名無しさん
19/04/24 18:32:06.10 6O+4Q2Ek.net
ええです

327:デフォルトの名無しさん
19/04/24 18:45:29.21 6T3A9gnL.net
ダブルクォートで囲んでも囲んじゃうとglob展開は行われない変数などのようには。(>>322見るとデフォでは??展開できるなんかあっったかなあ)
[ "$(echo abc*)" = "abc*" ]
とかかな
any='abc*'; [ "$(echo $any)" = "$any" ]

328:デフォルトの名無しさん
19/04/24 19:43:12.00 uakSx5ac.net
日本語がダメな奴と日本語がダメな奴が
初心者同士の会話をしてる。
ついていけない。

329:デフォルトの名無しさん
19/04/24 19:56:20.38 6O+4Q2Ek.net
>>327
ありがとうございます
echoを使わずできたらお願いします
無理なら諦めます

330:デフォルトの名無しさん
19/04/24 20:25:30.92 6T3A9gnL.net
>>328
答えてやれよ。マウントとりではなくて。ふたレスもするくらいな
(>>322は正直お前の>>323と同じだが、それだけじゃなというのと、もしかしてもしかしてもしかしてだけど)

331:デフォルトの名無しさん
19/04/24 20:29:18.25 6T3A9gnL.net
>>329
echoを使わずの条件がわからない。他にもやり方があるけど、複数行にだったり
stackoverflowではなんか凝ったのより ls が人気みたい。見た目でわかりやすからかな

332:デフォルトの名無しさん
19/04/24 21:08:22.56 uakSx5ac.net
何をやりたいのかわからない。
端末にecho *って入力して
あぁ、展開されましたねって
確認すりゃいいだけじゃんか
なんで[ ]とか使うのか

333:デフォルトの名無しさん
19/04/24 21:16:12.73 6T3A9gnL.net
>>332
お前が何言っているのかわからない
シェルスクリプトで判断してなにかその後にする部分のことを聞いてきているのだろう。その判断するとこだけを書いているのだろうと読むと思うけど
(日本語どうの言うなら、他人の日本語より自分の日本語を疑った方がいいようなw)

334:デフォルトの名無しさん
19/04/24 21:29:00.43 6T3A9gnL.net
>bashで abc*が展開できると出来ないときがあって
abc* としても、該当するものがあってglob展開する場合と、該当するものがなくてglob展開しない(出来ない=globのまま)ときがあって
>それをテストするのに
展開できなかった場合はマズいので(とかなんとで)、それをテストするのに
[  "abc*" = 'abc*' ]
>とやりたいのにできません
としてみましたが、思ったようになりません
だよ。たぶんw

335:デフォルトの名無しさん
19/04/24 22:15:49.65 kFXKi6KY.net
Ruby で該当するファイル数を数えれば?
それが、0 なら、該当なし
p Dir.glob( 'C:/Users/Owner/Documents/*.txt' ).length #=> 0

336:デフォルトの名無しさん
19/04/24 22:19:13.46 uakSx5ac.net
>>333
お前はさ、なぜこういう質問に至ったかまで考えられてないんだよ。
意味不明なんだよ。
>>334
そう思うやろ?だったら意味不明って気づかなきゃ。
> 展開できなかった場合はマズいので
つまり、現時点で「展開できてる」はずなわけだよ。
展開の仕方を知ってる。
なのに展開できないと言ってる。意味不明だろう?

337:デフォルトの名無しさん
19/04/24 22:37:08.62 6T3A9gnL.net
>>336
なにを言っているのかさっぱりわからん。意図目的とすることがな。いや後半はまったくわからん、お前の頭の世界の話だけのようで。ちょっと怖いぞw
ただマウントとりたいだけというのはわかるぞw

338:デフォルトの名無しさん
19/04/24 22:39:35.88 6T3A9gnL.net
読めなかったらのをごまかすためにむちゃくちゃ言っているんだな
うん。そゆことにしとこ。でないとアレだなということで

339:デフォルトの名無しさん
19/04/24 22:49:53.80 uakSx5ac.net
だーかーらー、いつもどおりのやってるやり方で展開して
それをチェックすればいいだけだろと

340:デフォルトの名無しさん
19/04/24 23:04:43.57 6T3A9gnL.net
ぜんぜん「だーかーらー」でもなんでもないな。お前の言っていることはわからん
どうも自称初心者じゃない自称日本語ダメじゃない人の自分の脳の世界でなんか言ってるとしか見えない
お前の言う初心者の ID:6T3A9gnL は >>327 ので不満があるようだがそれでも答えになってるらしいぞ
お前の変な言い分はお前のためでしかなく、他に対する目的も意味もない。マウントとりたいだけのお前には意味があってもな。マウントとりたいから延々続くのか?

341:デフォルトの名無しさん
19/04/24 23:06:17.58 6T3A9gnL.net
誤 お前の言う初心者の ID:6T3A9gnL は
正 お前の言う初心者の ID:6O+4Q2Ek は
なんかすまん

342:デフォルトの名無しさん
19/04/24 23:14:58.44 uakSx5ac.net
> お前の言う初心者の ID:6T3A9gnL は >>327 ので不満があるようだがそれでも答えになってるらしいぞ
だからなんなのか知らんが、お前ら、いつもどおりの展開ってecho使ってんのか?
使ってないだろ。いつもどおりの使えばいいだけなのに、
悩んで(?)別の方法模索してるから、意味不明だって言ってるんだよ。
質問者にも回答者にも

343:デフォルトの名無しさん
19/04/24 23:22:52.75 6T3A9gnL.net
むちゃくちゃww
自分で>>332って書いているのに
言うにことかいて「だからなんなのか知らんが」だってwwwもろマウントとりたいだけ、マウントとり失敗してわけわからんだけだな

344:デフォルトの名無しさん
19/04/24 23:54:51.80 uakSx5ac.net
展開されるかどうかの確認はそれでいいし、
プログラムでならいつもどおりのやり方で展開すればいい
何をやりたいのかわからないのに、どちらの話かわかるわけないだろ
どちらにしろ「は?」なわけだが

345:デフォルトの名無しさん
19/04/25 00:00:15.44 SQ7d9Ur4.net
すでにお前に対して「は?」だよ

346:デフォルトの名無しさん
19/04/25 00:02:54.32 zUwJ78d6.net
っていうか、正しいやり方知らんのか?
echo使って検査するんじゃないぞ(それじゃできない)

347:デフォルトの名無しさん
19/04/25 00:05:34.10 zUwJ78d6.net
それじゃできないっていうのはコレな
> abc* というファイルが実際にあるというというのは除外でいいのね?
abc* というファイルが実際にあることも考慮するやり方をするべき
そうすれば正解にたどり着く

348:デフォルトの名無しさん
19/04/25 00:16:01.39 2wE9GZDh.net
ダメな場合もあるのはわかって聞いているんだけど。本人がいいっていったからそれに合わせてだよ
だれかみたいに「すべき」とか強要するつもりも知識自慢したくてたまらないとかもないからな。その最後のといい、なんか偉そうにしたいのね、質問者の意図とか読まずに、知識自慢するためのw質問者の他の情報も引き出そうともせずに
shopt使うとかいう知識自慢だったら笑うぞ。別にabc*という実ファイルがあった場合でものshopt使わずにの方法もあるけどな

349:デフォルトの名無しさん
19/04/25 00:21:59.00 zUwJ78d6.net
本当に差があるやつとの会話は疲れるw
> bashで abc*が展開できると出来ないときがあって
展開でするやり方知っってるよな?それ使え
> それをテストするのに
展開できないことのテストはいらん
お前が知ってるはずの、展開するやり方を使って、
-f (もしくは -d や -e 等)で、その名前の
そのファイルが実査に有るかどうかを調べるだけ
shoptとかもしらん

350:デフォルトの名無しさん
19/04/25 00:22:22.15 zUwJ78d6.net
実査 -> 実際

351:デフォルトの名無しさん
19/04/25 00:34:11.93 2wE9GZDh.net
やっぱり、まだわかってないんだな、「展開~」という質問を
shoptとかもしらん....
-f とか、まさかそんな「当たり前の」こと言い出すとは
まさか「その程度」だとは思わなかったわっ。なんだろこれw

352:デフォルトの名無しさん
19/04/25 01:03:28.37 zUwJ78d6.net
× shoptとかもしらん
○ shoptとかもいらん
なんで当たり前の正解を言ったら
お前悔しがってんの?w
知識自慢したのお前じゃん
そして「は?」の意味わかっただろ。
全く見当違いのことをやろうとして、
全く見当違いの解答をしてるんだよ。
クソガキどもが

353:デフォルトの名無しさん
19/04/25 01:09:13.03 2wE9GZDh.net
そりゃ、お前が悪い。shoptもな
なんかもったいぶってるだけでだからな。自覚がないのか?さんざん偉そう俺は初心者じゃないってだけの、質問から外れたことばっかり言っている
お前が>>349>>352で書けば終わってることだからな
俺は別にお前みたいな知識自慢したくてなんてないぞ。おまえがさんざん俺偉いというだけのような&「そうすれば正解にたどり着く」とかうやむやなこと言うからだろうに
とうとう、「クソガキども」のお言葉いただきましたっ。なんだじじいかw自称他人を自分より劣ると言える

354:デフォルトの名無しさん
19/04/25 01:11:10.67 2wE9GZDh.net
誤 お前が>>349>>352で書けば終わってることだからな
正 お前が>>349>>332で書けば終わってることだからな

355:デフォルトの名無しさん
19/04/25 01:15:09.23 zUwJ78d6.net
だから何をやりたいのかわかったのは
それ以降のレス読んでからだろうが
意味不明だし、馬鹿がクソな回答しやがるし
ほんと低い

356:デフォルトの名無しさん
19/04/25 01:17:21.45 2wE9GZDh.net
>だから何をやりたいのかわかったのは
イミフ。おまえもたいがい日本語ダがメだぞ?w いままでのレスの数々でも
やっぱり「俺高いお前低い」とは言いたいのね。なんでそう言いたいのか自分に問いてみような

357:デフォルトの名無しさん
19/04/25 01:19:37.90 2wE9GZDh.net
ああ、「クソガキども」のお言葉いただいたので(なんでそんなこと言いたくなったのか自分に問いてみようなw)、もういいや

358:デフォルトの名無しさん
19/04/25 01:20:59.82 zUwJ78d6.net
> なんでそう言いたいのか自分に問いてみような
邪魔だからだな。頭悪そうな兄ちゃんがきて
頭悪そうな会話をしてる。そんな感じだ。

359:デフォルトの名無しさん
19/04/25 01:23:14.93 o77IOYp5.net
そして誰もいなくなった

360:デフォルトの名無しさん
19/04/25 04:25:44.56 Q6RVSnnY.net
質問する側が馬鹿すぎると馬鹿を引き寄せるだけなんだよなあ。
まず、まともな質問をするために man を読もうよ。

361:デフォルトの名無しさん
19/04/25 09:00:30.11 XBKhyEHe.net
よくわからんが、なんで -f が出てくるんだ?
ファイルの有無が問題じゃないんだろう?
globしたかしないかが問題なんだろう?

362:デフォルトの名無しさん
19/04/25 10:40:29.00 xhj9dxYD.net
""で囲むと展開されなくて""で囲まないと複数の引数として認識するから出来ないので諦めますね

363:デフォルトの名無しさん
19/04/25 10:43:57.02 zUwJ78d6.net
>>361
globでファイル名に展開されるかどうかは
ファイル(ディレクトリなども含む)の有無で決まるから

364:デフォルトの名無しさん
19/04/25 12:49:51.00 XBKhyEHe.net
>>363
こういう奴がセキュリティホールを作り込むのかね

365:デフォルトの名無しさん
19/04/25 13:29:45.25 wpotMNKo.net
そもそも、ファイル名に、半角英数字、- _ (base64url encoding)以外を使うような、
システムを作る奴が悪い
さらに、Windows では、大文字小文字だけが異なる、ファイル名も作れないし。
例、aB, Ab

366:デフォルトの名無しさん
19/04/25 14:58:23.69 zUwJ78d6.net
>>364
セキュリティホールを作るのは、
お前のように正しく理解してないからだよ。
問題が有るというのなら言ってみな。

367:デフォルトの名無しさん
19/04/25 16:49:38.33 hZ9DlonC.net
なぜ自信満々なのか、馬鹿の頭の構造はわからないな。

368:デフォルトの名無しさん
19/04/25 20:07:34.96 zUwJ78d6.net
反論がないから

369:デフォルトの名無しさん
19/04/26 03:55:26.84 N1bTr2ZN.net
馬鹿なレスだな

370:デフォルトの名無しさん
19/04/26 04:25:43.51 Y1o8+v/L.net
シェルの歴史に詳しくなれるサイト見つけた
URLリンク(www.in-ulm.de)

371:デフォルトの名無しさん
19/05/03 15:34:52.90 m+FxQhlt.net
bashのさ、<() ってさ、sort test.txt みたいなのを sort <(cat test) って書けるから
リダイレクトを受け付けないコマンドに、一時ファイル作らずに渡せると思ったけど、
そうとはかぎらないよな?例えば、同じファイルを二回読み込むとかさ
そういうのってやっぱ一時ファイル作らないと無理だよな?

372:デフォルトの名無しさん
19/05/03 18:08:45.95 /bmAVHAq.net
>>371
パイプの概念がないのか?
sortコマンドもどこでどうなったのかを気にしないで使うというのもよくわからない。

373:デフォルトの名無しさん
19/05/03 21:10:21.19 m+FxQhlt.net
>>372
知らんがな。俺に言うなや。
そのツールが、そうなってるんだから
sortコマンドはただの例だからこれ以上追求しなくていい
てか、複数ファイルを入力したり複数ファイルを出力したりすることだって
あるんだから、必ずパイプで解決できるわけじゃない
diffコマンドとかそうだろ

374:デフォルトの名無しさん
19/05/03 21:28:48.60 wXl0ssRE.net
同じ出力のデータを分けて処理することは可能だが、なぜ魔法文にこだわっているのかがわからない。

375:デフォルトの名無しさん
19/05/03 21:31:24.78 m+FxQhlt.net
>>374
その話は関係ないから打ち切ろう
あるツールが「引数で指定した同じファイルを二回読込みしている」
そういう処理をしている。(そのツールの修正は不可能)
ここまでは理解しているかな?

376:デフォルトの名無しさん
19/05/03 21:32:23.63 m+FxQhlt.net
まあ結論としては無理ってわかってんだけどさ
bashの拡張を持ってしても

377:デフォルトの名無しさん
19/05/03 21:35:32.54 m+FxQhlt.net
あ、一時ファイル(FIFOファイル含む)作りたくないっていうのが最終的な希望ね。
メモリだけ(tmpfsや類似のメモリベースのファイルシステムやブロックデバイス除く)でやりたい。
無理ってわかってるけど。

378:デフォルトの名無しさん
19/05/03 23:01:24.06 wXl0ssRE.net
ただの無知か。

379:デフォルトの名無しさん
19/05/04 09:14:36.29 HnSBFy63.net
>>371
例がないと何を言っているか意味がよく分からない。
teeとかファイルに出力しながら標準出力にも出力しているけど、
そのようなことがbashだけで表現できればOK?

380:デフォルトの名無しさん
19/05/04 09:40:10.00 eyQzK648.net
>>379
「リダイレクトを受け付けないコマンド」例
ファイル内容と行数を表示するために「同じファイルを二回読み込む」
これは "例" でありこのコマンドの内容についてのレスは不要
実際には中身はわからずバイナリで修正不可能なものとする。
#!/bin/sh
cat "$1"
wc -l "$1"

↑このコマンドに対して、一時ファイル(FIFOファイル含む)を作らないでデータを渡す

381:デフォルトの名無しさん
19/05/04 09:47:38.10 HnSBFy63.net
>>380
ファイルを作らないでメモリだけでっていうことなら、
↓こんな感じならOKなの?
dat=$(cat $1)

382:デフォルトの名無しさん
19/05/04 09:57:48.90 eyQzK648.net
>>381
それでもいいよ
何をしたいのかわからんけど
kono-comand ?
↑?の部分になんて書く?

383:デフォルトの名無しさん
19/05/04 10:01:46.67 eyQzK648.net
明らかに読み間違えてるレスがくると疲れるんで、
一時ファイルを使った場合の例も書いておくは
これは例なんで、この例を修正しろなんてレスは不要
generate-text > /tmp/test.txt
kono-comand "/tmp/test.txt"
この一時ファイル test.txt を作りたくない
なんで?とかいう質問も不要

384:デフォルトの名無しさん
19/05/04 10:05:16.07 HnSBFy63.net
>>383
ホントに意味が分からないんだは、
上の例でもこれでいいんじゃないのと思っちゃう。
generate-text | kono-comand
だからこれを直せってほうが意味通じるかも。

385:デフォルトの名無しさん
19/05/04 10:05:29.00 ic6F2rX1.net
条件の説明が下手すぎ

386:デフォルトの名無しさん
19/05/04 10:07:09.78 eyQzK648.net
>>384
本当に疲れる。
>>371を読み返せ。
> リダイレクトを受け付けないコマンドに、一時ファイル作らずに渡せると思ったけど、
> リダイレクトを受け付けないコマンド
> リダイレクトを受け付けないコマンド
> リダイレクトを受け付けないコマンド
パイプもリダイレクトだ。

387:デフォルトの名無しさん
19/05/04 10:08:50.78 eyQzK648.net
っていうか、
generate-text | kono-comand
kono-commandの内容は上に書いたとおり↓で
> #!/bin/sh
> cat "$1"
> wc -l "$1"
修正不可能つってるんだから
これでは動きません。の一言でよかったなw
>>385
動かないコードを書いる時点で説明の問題じゃない。

388:デフォルトの名無しさん
19/05/04 10:09:39.22 ic6F2rX1.net
>>384
コマンドが標準入力をサポートしてない場合のだろう、よってパイプが使えない
標準入力サポートしていてパイプでいいだろうというコマンド例を挙げてくるとか説明が下手すぎなだけだろうなw

389:デフォルトの名無しさん
19/05/04 10:10:34.97 eyQzK648.net
>>388
あ、回答者の説明が下手すぎってことかw

390:デフォルトの名無しさん
19/05/04 10:10:41.51 ic6F2rX1.net
いつもの自信過剰な人か

391:デフォルトの名無しさん
19/05/04 10:11:55.19 eyQzK648.net
>>390
ん?今回はへこましてみるか?
俺「やっぱできないよなぁ」
→ 俺もできないと思うよ。
で終わればいいやん。

392:デフォルトの名無しさん
19/05/04 10:15:59.85 ic6F2rX1.net
標準入力もデバイス(ファイル)としてある

393:デフォルトの名無しさん
19/05/04 10:16:50.69 eyQzK648.net
URLリンク(hogem.hatenablog.com)
> diff -u hoge.out fuga.out
> diff <(./hoge) <(./fuga)
よくこんな感じで、一時ファイルを作らない例として挙げられてるけど、
これって、diffが引数のファイルを一度しか読み込まないという
内部実装に依存しているってことなんだよな。
だから複数回読み込んでいたりすると使えない。
一度しか読み込まないという仕様はないだろうから
たまたま使えたということ。

394:デフォルトの名無しさん
19/05/04 10:17:09.83 eyQzK648.net
>>392
知ってる

395:デフォルトの名無しさん
19/05/04 10:23:29.06 ic6F2rX1.net
ストリームでいいのかファイルでなければならないのか条件説明がやっぱり下手すぎ
標準入出力は普通は単なるストリームで戻ったりはしたない、一気通貫するだけ
2度読み??とかストリームでないなら当然ファイルにしなければならないだろうに、あたりまえだろう。結局あたりまえのことを確認したいだけなのか。例で上げてくるのがストリームでいいだろうのを出すから下手なんだよ

396:デフォルトの名無しさん
19/05/04 10:24:53.38 eyQzK648.net
>>395
これを満たせばいいだけ。
いい加減にしろや

「リダイレクトを受け付けないコマンド」例
ファイル内容と行数を表示するために「同じファイルを二回読み込む」
これは "例" でありこのコマンドの内容についてのレスは不要
実際には中身はわからずバイナリで修正不可能なものとする。
#!/bin/sh
cat "$1"
wc -l "$1"

↑このコマンドに対して、一時ファイル(FIFOファイル含む)を作らないでデータを渡す

397:デフォルトの名無しさん
19/05/04 10:26:01.06 eyQzK648.net
はは。catとwcでファイル読み込みを二回実行してるから、
ストリームでは無理なことにも気づいてない(笑)
マヌケか

398:デフォルトの名無しさん
19/05/04 10:26:07.92 ic6F2rX1.net
それが下手だと言ってもわからないんだな

399:デフォルトの名無しさん
19/05/04 10:27:31.82 eyQzK648.net
>>398
どこが下手なのか言ってないからね。
ストリームで不可能な例を見て、
これストリームで可能じゃん!って
言ってしまった時点で、お前の負け

400:デフォルトの名無しさん
19/05/04 10:30:40.72 eyQzK648.net
俺が言いたいのは、
> diff <(./hoge) <(./fuga)
が使えるかどうかは、コマンド(この場合はdiff)の
内部実装に依存するから、試してみるまでわからないということ、
ファイルじゃないと二度読みはできないとかそういう話はしてない。

<(./hoge)が使えるかどうかは、コマンド次第という話をしてる
どんなコマンドだって、一度読むだけで実装することは可能(メモリに読み込めばいい)
だから、<(./hoge)が使えるかどうかはやってみるまでわからんのだよな。
という話をしてる。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch