シェルスクリプトに関する総合スレッドです。
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
前スレ:
シェルスクリプト総合 その28
http://mevius.5ch.net/test/read.cgi/tech/1532397676/
シェルスクリプト総合 その29
■ このスレッドは過去ログ倉庫に格納されています
2018/09/21(金) 23:34:47.98ID:/eJt2TVD
202デフォルトの名無しさん
2019/04/08(月) 23:54:41.62ID:QfzJZ21c Ruby のglob を使った方が、バグらないので良い!
203デフォルトの名無しさん
2019/04/08(月) 23:55:27.24ID:8H4AhNTa 空のディレクトリで実行するとこうなるのかw
$ ls *.a *.c *.c
ls: '*.a' にアクセスできません: そのようなファイルやディレクトリはありません
ls: '*.c' にアクセスできません: そのようなファイルやディレクトリはありません
ls: '*.c' にアクセスできません: そのようなファイルやディレクトリはありません
$ ls *.a *.c *.c
ls: '*.a' にアクセスできません: そのようなファイルやディレクトリはありません
ls: '*.c' にアクセスできません: そのようなファイルやディレクトリはありません
ls: '*.c' にアクセスできません: そのようなファイルやディレクトリはありません
204デフォルトの名無しさん
2019/04/08(月) 23:58:38.45ID:8H4AhNTa 多分あいつは、
> この例「だけ」
のことしか考えてない予感がするなw
> この例「だけ」
のことしか考えてない予感がするなw
205デフォルトの名無しさん
2019/04/09(火) 00:00:36.62ID:cRtn1aSe >>202
そうだね。ファイルが見つからないときは
ちゃんと空のリストを返してくれる。
シェルスクリプトのように、「*」を返すことはないね。
irb(main):001:0> Dir.glob('*')
=> []
そうだね。ファイルが見つからないときは
ちゃんと空のリストを返してくれる。
シェルスクリプトのように、「*」を返すことはないね。
irb(main):001:0> Dir.glob('*')
=> []
206デフォルトの名無しさん
2019/04/09(火) 00:01:15.03ID:cRtn1aSe ID変わったけど、俺が ID:8H4AhNTa な
207デフォルトの名無しさん
2019/04/09(火) 00:01:53.02ID:b0dEtQwc まだ、ゴネてる。自分の思ったようにならないってだけでよくそれだけ粘れるな
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
イミフ。なにを言いたいの?
なんで、いちいちいちいちいちいち説明教えなきゃならいないねん
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デフォルトの名無しさん
2019/04/09(火) 00:12:14.14ID:cRtn1aSe209デフォルトの名無しさん
2019/04/09(火) 00:12:42.47ID:cRtn1aSe >>207
やっぱりlsの例だけしか考えてないようだね
やっぱりlsの例だけしか考えてないようだね
210デフォルトの名無しさん
2019/04/09(火) 00:15:06.05ID:b0dEtQwc その例だけなら、回らないのが望ましいだろな。だが、POSIXはシェルスクリプトだけを考えてるわけではないからしょうがないうちだろな
で?
で?
211デフォルトの名無しさん
2019/04/09(火) 00:16:54.68ID:b0dEtQwc >>209
何を言いたいのかわからんな。どゆこと?まさか「正確」と同じパターンじゃないよな?その気しか思えないので具体的に言って
何を言いたいのかわからんな。どゆこと?まさか「正確」と同じパターンじゃないよな?その気しか思えないので具体的に言って
212デフォルトの名無しさん
2019/04/09(火) 00:18:30.84ID:cRtn1aSe ついでにPHPの場合
$ php -r "print_r(glob('*'));"
Array
(
)
Perlの場合
perl -MData::Dumper -e 'print Dumper [glob "*"]'
$VAR1 = [];
Rubyと同じく、見つからない場合は
デフォルトでは空のリストが帰ってくる。
$ php -r "print_r(glob('*'));"
Array
(
)
Perlの場合
perl -MData::Dumper -e 'print Dumper [glob "*"]'
$VAR1 = [];
Rubyと同じく、見つからない場合は
デフォルトでは空のリストが帰ってくる。
213デフォルトの名無しさん
2019/04/09(火) 00:19:17.64ID:cRtn1aSe >>210
さっきから
> POSIXはシェルスクリプトだけを考えてるわけではないから
を繰り返してるけど、シェルスクリプト以外とは何の話をしてるの?
そして、シェルスクリプト以外ではどうだって言いたいの?
さっきから
> POSIXはシェルスクリプトだけを考えてるわけではないから
を繰り返してるけど、シェルスクリプト以外とは何の話をしてるの?
そして、シェルスクリプト以外ではどうだって言いたいの?
214デフォルトの名無しさん
2019/04/09(火) 00:20:20.88ID:cRtn1aSe215デフォルトの名無しさん
2019/04/09(火) 00:20:53.10ID:b0dEtQwc >>213
マジか...
マジか...
216デフォルトの名無しさん
2019/04/09(火) 00:21:12.57ID:cRtn1aSe >>215
逃げるなよ
逃げるなよ
217デフォルトの名無しさん
2019/04/09(火) 00:24:19.08ID:b0dEtQwc >>214
ああ、なんだ「シェルスクリプト」の(それも特定な)場合か。「ls」なんて言ってるから他のコマンドとかと思ったぞ
POSIXはシェルスクリプトだけを考えてるわけではないからw
話にならない、POSIXを勉強して出直してね
ああ、なんだ「シェルスクリプト」の(それも特定な)場合か。「ls」なんて言ってるから他のコマンドとかと思ったぞ
POSIXはシェルスクリプトだけを考えてるわけではないからw
話にならない、POSIXを勉強して出直してね
218デフォルトの名無しさん
2019/04/09(火) 00:24:33.50ID:cRtn1aSe C言語めんどくせーなーと思ったら、サクッとソースコード見つかった。
https://qiita.com/sassy_watson/items/03c16bd03b56e5579477
↑のコードの ./*.txt を * に変換したけど、
やはり、空のディレクトリで * と表示されることはなく
何も表示されなかった。
POSIXってほんと何を言いたいんだろう?
https://qiita.com/sassy_watson/items/03c16bd03b56e5579477
↑のコードの ./*.txt を * に変換したけど、
やはり、空のディレクトリで * と表示されることはなく
何も表示されなかった。
POSIXってほんと何を言いたいんだろう?
219デフォルトの名無しさん
2019/04/09(火) 00:25:50.97ID:b0dEtQwc220デフォルトの名無しさん
2019/04/09(火) 00:26:21.07ID:cRtn1aSe POSIXはシェルスクリプトだけを〜とか、じゃあC言語のことなんですかねぇ
でもC言語でも空のディレクトリで * が返ってくることはないし
ほんと何が言いたいんだかw
でもC言語でも空のディレクトリで * が返ってくることはないし
ほんと何が言いたいんだかw
221デフォルトの名無しさん
2019/04/09(火) 00:27:47.89ID:cRtn1aSe POSIXはシェルスクリプトだけを考えてるわけではないから
→ Ruby・・・空の配列を返す
→ Perl・・・空の配列を返す
→ PHP・・・空の配列を返す
→ C言語・・・空の配列を返す
シェルスクリプト以外は空の配列を返します。
→ Ruby・・・空の配列を返す
→ Perl・・・空の配列を返す
→ PHP・・・空の配列を返す
→ C言語・・・空の配列を返す
シェルスクリプト以外は空の配列を返します。
222デフォルトの名無しさん
2019/04/09(火) 00:28:27.37ID:b0dEtQwc223デフォルトの名無しさん
2019/04/09(火) 00:29:23.15ID:b0dEtQwc 以後、脊髄反射マンと呼ぶからなw
224デフォルトの名無しさん
2019/04/09(火) 00:29:27.03ID:cRtn1aSe >>222
またそれか。よく読んでも、そうした理由は書いてない。
またそれか。よく読んでも、そうした理由は書いてない。
225デフォルトの名無しさん
2019/04/09(火) 00:29:47.10ID:cRtn1aSe >>223
脊髄反射マン必死だなw
脊髄反射マン必死だなw
226デフォルトの名無しさん
2019/04/09(火) 00:31:21.79ID:b0dEtQwc 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デフォルトの名無しさん
2019/04/09(火) 00:32:12.65ID:b0dEtQwc >>225
モロ体現してありがたい。オモロイなあんたは
モロ体現してありがたい。オモロイなあんたは
228デフォルトの名無しさん
2019/04/09(火) 00:32:37.61ID:cRtn1aSe229デフォルトの名無しさん
2019/04/09(火) 00:34:36.17ID:b0dEtQwc >>228
言っているけど。「読めれば」そう書いてあるんだけどな。「読めない読めない」言われてもしょうがない
あんただって、「空」だったらマズいときもあるって認めてるやん
本当にただただ「認めたくない」だけなんだな。その「コロ」っとあんたの原点に戻るあたり
まあ、がんばりや
言っているけど。「読めれば」そう書いてあるんだけどな。「読めない読めない」言われてもしょうがない
あんただって、「空」だったらマズいときもあるって認めてるやん
本当にただただ「認めたくない」だけなんだな。その「コロ」っとあんたの原点に戻るあたり
まあ、がんばりや
230デフォルトの名無しさん
2019/04/09(火) 00:35:06.66ID:cRtn1aSe そして面白いのが、シェルスクリプトは glob で見つからない場合に
検索パターンを返すのに対して、シェルスクリプト以外では
見つからない場合に、空のリストを返すって所だな。
検索パターンを返すのに対して、シェルスクリプト以外では
見つからない場合に、空のリストを返すって所だな。
231デフォルトの名無しさん
2019/04/09(火) 00:37:41.48ID:cRtn1aSe >>229
お前、マズイときもあるし、マズくない時もあるって
自分で認めてるやんw
ということはお前の主張は、所詮マズイときの例でしかなく
マズくない時には当てはまらないってことになるんだぞ
わかってるのか?お前の主張が崩れてるの
で、シェルスクリプト以外は空のリストを返しているのに
シェルスクリプトだけは、見つからなかった時に * という
文字列を返すという仕様にした理由は?
お前、マズイときもあるし、マズくない時もあるって
自分で認めてるやんw
ということはお前の主張は、所詮マズイときの例でしかなく
マズくない時には当てはまらないってことになるんだぞ
わかってるのか?お前の主張が崩れてるの
で、シェルスクリプト以外は空のリストを返しているのに
シェルスクリプトだけは、見つからなかった時に * という
文字列を返すという仕様にした理由は?
232デフォルトの名無しさん
2019/04/09(火) 00:39:30.00ID:cRtn1aSe 結局、一番マトモな理由は >>191が書いた
> おそらく, そういう仕様をきめてからそういう動作をさせたわけではないとおもいます.
これだけなんだよな。特に理由はない。
(深く考えずに)そうしてしまった。
もちろん、正式なドキュメントとして
この理由が、書かれている文書は見つかってないがね。
> おそらく, そういう仕様をきめてからそういう動作をさせたわけではないとおもいます.
これだけなんだよな。特に理由はない。
(深く考えずに)そうしてしまった。
もちろん、正式なドキュメントとして
この理由が、書かれている文書は見つかってないがね。
233デフォルトの名無しさん
2019/04/09(火) 00:42:08.93ID:cRtn1aSe あ、みなさん。もし ID:b0dEtQwc を擁護したい人がいるならば
ID:b0dEtQwc が示したドキュメントの中から、
「そういう仕様にした"理由"」を書いてある所を指摘して構わないんですよ?
ないでしょう? 誰も指摘しないもんね。それが証拠だよ。
ID:b0dEtQwc が示したドキュメントの中から、
「そういう仕様にした"理由"」を書いてある所を指摘して構わないんですよ?
ないでしょう? 誰も指摘しないもんね。それが証拠だよ。
234デフォルトの名無しさん
2019/04/09(火) 00:42:13.89ID:b0dEtQwc 何言っているの?
>この仕様、なにか便利なの?
が、お前の原点だろ?それ以後「認めなたくない」のであーだこーだ言っているだけだな
>この仕様、なにか便利なの?
が、お前の原点だろ?それ以後「認めなたくない」のであーだこーだ言っているだけだな
235デフォルトの名無しさん
2019/04/09(火) 00:43:58.23ID:b0dEtQwc とうとう誰とも言えない人に頼るようになったか...ww
236デフォルトの名無しさん
2019/04/09(火) 00:46:08.72ID:cRtn1aSe237デフォルトの名無しさん
2019/04/09(火) 00:50:22.73ID:b0dEtQwc >>236
流れというかレスを読めないあんたに言われたくないw
いや、原点の話でしかないな。あんたの都合に(それもあんたの都合の良いようになだけな)合わせる必要性はこれっぽちもないな
とりあえず、原点の問題は解消した&マズい場合もあるそれが理由ってことも解消したってことで、おしまい
流れというかレスを読めないあんたに言われたくないw
いや、原点の話でしかないな。あんたの都合に(それもあんたの都合の良いようになだけな)合わせる必要性はこれっぽちもないな
とりあえず、原点の問題は解消した&マズい場合もあるそれが理由ってことも解消したってことで、おしまい
238デフォルトの名無しさん
2019/04/09(火) 00:51:41.47ID:cRtn1aSe https://linuxjm.osdn.jp/html/LDP_man-pages/man7/glob.7.html
> において、*.gif ファイルが全くない場合でも、 これは空のリストに展開されるため、エラーにならない。
> しかし POSIX では、文法的に正しくないパターンや、 マッチがなかったパターンは、 そのまま変更されずに残されることになっている。
> bash では、次のコマンドで昔からの振る舞いに設定することができる。
>
> shopt -s nullglob
なぜ昔からの振る舞いから替えたのか?その理由が謎
(理由を明確に述べているドキュメントがない)
> において、*.gif ファイルが全くない場合でも、 これは空のリストに展開されるため、エラーにならない。
> しかし POSIX では、文法的に正しくないパターンや、 マッチがなかったパターンは、 そのまま変更されずに残されることになっている。
> bash では、次のコマンドで昔からの振る舞いに設定することができる。
>
> shopt -s nullglob
なぜ昔からの振る舞いから替えたのか?その理由が謎
(理由を明確に述べているドキュメントがない)
239デフォルトの名無しさん
2019/04/09(火) 00:52:47.78ID:cRtn1aSe240デフォルトの名無しさん
2019/04/09(火) 00:54:45.59ID:cRtn1aSe > POSIXはシェルスクリプトだけを考えてるわけではないから
↑これも結局何が言いたいのか不明だったな
まあ、何も考えずに(調べずに)シェルスクリプト以外の言語でも
* を返してるはずだって思い込んだんだろうなw
(実際には見つからない場合は空のリストを返します。)
↑これも結局何が言いたいのか不明だったな
まあ、何も考えずに(調べずに)シェルスクリプト以外の言語でも
* を返してるはずだって思い込んだんだろうなw
(実際には見つからない場合は空のリストを返します。)
241デフォルトの名無しさん
2019/04/09(火) 01:01:34.97ID:b0dEtQwc242デフォルトの名無しさん
2019/04/09(火) 01:09:06.87ID:cRtn1aSe > POSIXはシェルスクリプトだけを考えてるわけではないから
↑これで何が言いたいのかを書けば済む話
それが出来ないのはなぜだろうw
↑これで何が言いたいのかを書けば済む話
それが出来ないのはなぜだろうw
243デフォルトの名無しさん
2019/04/09(火) 01:09:51.04ID:cRtn1aSe あ、ちなみに「注目すべきとこ」には何も書いてませんよ。
いつもどおりです。
いつもどおりです。
244デフォルトの名無しさん
2019/04/09(火) 01:15:27.47ID:b0dEtQwc ほんとーーにっ、「読めない」のな、この脊髄反射マンっw
245デフォルトの名無しさん
2019/04/09(火) 01:16:58.07ID:cRtn1aSe 読めないって言わずに、具体的に引用すればいいだけなのに
それをしないのは、結局引用する場所がないからなんだよね
それをしないのは、結局引用する場所がないからなんだよね
246デフォルトの名無しさん
2019/04/09(火) 01:23:40.88ID:b0dEtQwc 「無い」から「引用できない」に変わったけど、同じパターンやな。そして前言はなかったことにという前々からの同じパターン
247デフォルトの名無しさん
2019/04/09(火) 01:25:22.47ID:cRtn1aSe >>246はとりあえずレスしてみましたってだけで
中身がなにもないことに、皆さん気づきましたか?
中身がなにもないことに、皆さん気づきましたか?
248デフォルトの名無しさん
2019/04/09(火) 01:26:56.18ID:b0dEtQwc なんか少しは自分を見直すとかあって、ここでもこんなクソ(俺のも含めて)なレスの応酬もなく、見てためになる万人が楽しめるレス、Q&Aになるかと思ったが、無理かやっぱ(偉そう偉そう)
そりゃ無理かっ。なんか急に飽きた、じゃな
そりゃ無理かっ。なんか急に飽きた、じゃな
249デフォルトの名無しさん
2019/04/09(火) 01:29:05.84ID:cRtn1aSe はい、コイツは何度目かの逃亡宣言です。
また懲りずに来ますよw
また懲りずに来ますよw
250デフォルトの名無しさん
2019/04/10(水) 08:51:10.36ID:1CG1Z7Gt bashの算術計算で小数を使う方法ってないです?
+=で加算したいんですが
+=で加算したいんですが
251デフォルトの名無しさん
2019/04/10(水) 12:14:47.90ID:sSiaigIF >>250
それ俺も欲しいんだよね。
前にやった実装は、小数点以下2位固定だったから
1.23 を 123 にして計算してから、後ろ2桁の間にドットを入れて対応したけど
小数点以下の桁数が1.2とか1.234とかだったら面倒なんだよね。
bcコマンドとか呼び出せば簡単なんだが。
それ俺も欲しいんだよね。
前にやった実装は、小数点以下2位固定だったから
1.23 を 123 にして計算してから、後ろ2桁の間にドットを入れて対応したけど
小数点以下の桁数が1.2とか1.234とかだったら面倒なんだよね。
bcコマンドとか呼び出せば簡単なんだが。
252デフォルトの名無しさん
2019/04/11(木) 17:03:23.97ID:bMTFn+JP exec 3>&1; exec >&-; exec >&3
たまにこんなのを見ますがこれはどんな時に使うんです?
ファイルディスクリプタ自体は理解しましたがfdの複製や切り替える目的が分からなくて
cmd 2>err.txtは意識せず使えてますが
たまにこんなのを見ますがこれはどんな時に使うんです?
ファイルディスクリプタ自体は理解しましたがfdの複製や切り替える目的が分からなくて
cmd 2>err.txtは意識せず使えてますが
253デフォルトの名無しさん
2019/04/11(木) 17:46:50.14ID:cVfQRf/N >>252
不勉強なんで「3」ってfdは知らないんだけど、「>&」ってリダイレクトを
使うと書き込みじゃなくて切替になるんだけど、これを使うとエラー
出力を標準出力に切り替えて標準出力で両方の出力を得たりする
ことができるです
「Command > FileName 2>&1」ってするとエラー出力の内容が標準
出力になってFileNameに両方の内容が書き込まれる
逆に「Command 2> FileName 1>&2」ってすると標準出力がエラー
出力になっるので、エラー出力でFileNameに書き込むことが出来る
で、何に使うのかっていうと、「grep」なんかは検索結果は標準出力に
でるけど「指定されたのはディレクトリだよ」みたいなメッセージは
エラー出力に出される
両方の出力をみて処理したいとかの時にはこれで切り替えて標準
出力の内容を変数に保存しておいて処理するとかに使うです
例が雑でわかりにくいかもだけど、エラーと通常の出力を同じ出力で
使う方法ってことで、あとはスクリプトなんでアイデアしだいなんで
不勉強なんで「3」ってfdは知らないんだけど、「>&」ってリダイレクトを
使うと書き込みじゃなくて切替になるんだけど、これを使うとエラー
出力を標準出力に切り替えて標準出力で両方の出力を得たりする
ことができるです
「Command > FileName 2>&1」ってするとエラー出力の内容が標準
出力になってFileNameに両方の内容が書き込まれる
逆に「Command 2> FileName 1>&2」ってすると標準出力がエラー
出力になっるので、エラー出力でFileNameに書き込むことが出来る
で、何に使うのかっていうと、「grep」なんかは検索結果は標準出力に
でるけど「指定されたのはディレクトリだよ」みたいなメッセージは
エラー出力に出される
両方の出力をみて処理したいとかの時にはこれで切り替えて標準
出力の内容を変数に保存しておいて処理するとかに使うです
例が雑でわかりにくいかもだけど、エラーと通常の出力を同じ出力で
使う方法ってことで、あとはスクリプトなんでアイデアしだいなんで
254デフォルトの名無しさん
2019/04/11(木) 23:20:48.83ID:smzX9gsy255デフォルトの名無しさん
2019/04/12(金) 00:07:43.92ID:XpqpR76r >>252 はリダイレクトを知りたいんじゃなくて、fd=1 を 3 にコピーして 1 をクローズして再度 3 から 1 にコピーする意味
が何なのかを質問しているんだと思う。
結局もとのファイルに繋ぎなおすだけだよね。
一旦クローズするから flush されるとか?ならわかるんだが、実際どうなのかわからん。
が何なのかを質問しているんだと思う。
結局もとのファイルに繋ぎなおすだけだよね。
一旦クローズするから flush されるとか?ならわかるんだが、実際どうなのかわからん。
256デフォルトの名無しさん
2019/04/12(金) 00:45:21.11ID:L59U/aC1 ファイルディスクリプタに関しては
逆引き辞書が必要なんだと思う
○○をしたい時 → こうします。っていうやつ
逆引き辞書が必要なんだと思う
○○をしたい時 → こうします。っていうやつ
257デフォルトの名無しさん
2019/04/12(金) 03:08:23.09ID:WO5SLys3 ファイルディスクリプタ(FD) 3番からは、システムが使うけど、ユーザーも使うことができる。
FD0 : 標準入力、FD1 : 標準出力、FD2 : 標準エラー出力
端末に、ls と打つと、
1. シェルが、lsコマンドのプロセスを起動して、それに、FD0〜2 を渡す
2. lsプロセスは、FD3 を使って、ファイル一覧を作って、FD1 に出力する
主なFD3 の使用方法は、標準入力を、ファイル・キーボードの2つで、切り替えて使いたい時
標準入力をファイルからにすると、キーボード入力が出来なくなるため、
一旦、標準入力(FD0)をFD3 にして、ファイルから入力して、済んだら元に戻す
こんな事を一々、シェルスクリプトでやるよりも、Ruby でやればよい。
FD何番を使っているとか、意識せずにすむ
FD0 : 標準入力、FD1 : 標準出力、FD2 : 標準エラー出力
端末に、ls と打つと、
1. シェルが、lsコマンドのプロセスを起動して、それに、FD0〜2 を渡す
2. lsプロセスは、FD3 を使って、ファイル一覧を作って、FD1 に出力する
主なFD3 の使用方法は、標準入力を、ファイル・キーボードの2つで、切り替えて使いたい時
標準入力をファイルからにすると、キーボード入力が出来なくなるため、
一旦、標準入力(FD0)をFD3 にして、ファイルから入力して、済んだら元に戻す
こんな事を一々、シェルスクリプトでやるよりも、Ruby でやればよい。
FD何番を使っているとか、意識せずにすむ
258257
2019/04/12(金) 04:14:55.73ID:WO5SLys3 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版には載っているかどうか、知らないけど
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デフォルトの名無しさん
2019/04/12(金) 13:25:25.09ID:L59U/aC1 もう少しまともに説明できるやついないのかな・・・
260デフォルトの名無しさん
2019/04/12(金) 13:27:28.90ID:I415couP 宿題は自分でやろうな
261デフォルトの名無しさん
2019/04/12(金) 16:22:09.16ID:zYICSkfs 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と表示される。トラップできる。)
なんでこうなって、どれが正しい動きで、どれでも同じ動きさせるには、どうすりゃいいの?
以下のスクリプトの時、実行してすぐに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デフォルトの名無しさん
2019/04/12(金) 16:46:27.11ID:2vVcl4ag 宿題は自分でやろうな
263デフォルトの名無しさん
2019/04/13(土) 06:04:26.25ID:blG/UTRx Ruby では、カスタムハンドラを定義した場合、終了しない。
デフォルトのままなら、Ctrl+C で終了する
つまり、デフォルトハンドラから、カスタムハンドラへ付け替えたため
sleep 7 #=> ここではデフォルトハンドラだから、Ctrl+C で終了する
previous_handler = Signal.trap( :INT ) do
puts "シグナルハンドラへ入った!"
end
print "previous_handler = "
p previous_handler #=> "DEFAULT"
sleep 7 #=> ここでは、カスタムハンドラへ付け替えたので、終了はしない
デフォルトのままなら、Ctrl+C で終了する
つまり、デフォルトハンドラから、カスタムハンドラへ付け替えたため
sleep 7 #=> ここではデフォルトハンドラだから、Ctrl+C で終了する
previous_handler = Signal.trap( :INT ) do
puts "シグナルハンドラへ入った!"
end
print "previous_handler = "
p previous_handler #=> "DEFAULT"
sleep 7 #=> ここでは、カスタムハンドラへ付け替えたので、終了はしない
264デフォルトの名無しさん
2019/04/13(土) 06:40:14.96ID:mImzJn5T それはシェルスクリプトも同じだろうな。上の終了しているのは set -e しているからじゃないのかな
シェルスクリプトは子プロセスを起動していてシグナルを受けるのが子プロセスでが多くタイミング的に〜以下省略
シェルスクリプトは子プロセスを起動していてシグナルを受けるのが子プロセスでが多くタイミング的に〜以下省略
265デフォルトの名無しさん
2019/04/13(土) 07:34:12.37ID:bIdtQ5MW > set -e しているからじゃないのかな
それをわかってるから、サンプルコードにも入れてるんだけどねw
問題はそこじゃなくて、なんでシェル毎に挙動違うんだよ!?
どれが正しいんだよ!?という話なわけで
それをわかってるから、サンプルコードにも入れてるんだけどねw
問題はそこじゃなくて、なんでシェル毎に挙動違うんだよ!?
どれが正しいんだよ!?という話なわけで
266デフォルトの名無しさん
2019/04/13(土) 07:57:58.58ID:i5T2wQ7z CTRL-Cを入力するタイミングが下手すぎるって話だろ
まさか手入力じゃあるまいな?
まさか手入力じゃあるまいな?
267デフォルトの名無しさん
2019/04/13(土) 08:08:06.94ID:bIdtQ5MW >>266
手入力しないでやる方法を教えてくれ!
手入力しないでやる方法を教えてくれ!
268デフォルトの名無しさん
2019/04/13(土) 08:08:38.43ID:bIdtQ5MW いやkill使うのは知ってる。それをどういう風に使えば、
手入力と全く同じことを再現できるのかという話だ。
手入力と全く同じことを再現できるのかという話だ。
269デフォルトの名無しさん
2019/04/13(土) 08:12:44.72ID:bIdtQ5MW 2つの端末を使って一方で実行してから
もう一方で(手入力で)実行するっていうのは
結局手入力してるのと変わらないし、
1つのスクリプトでkillすると、
それこそわけわからんことになる。
イベントハンドラ内でkillするか、違う場所でkillするか
シェルによって挙動が違う
もう一方で(手入力で)実行するっていうのは
結局手入力してるのと変わらないし、
1つのスクリプトでkillすると、
それこそわけわからんことになる。
イベントハンドラ内でkillするか、違う場所でkillするか
シェルによって挙動が違う
270263
2019/04/13(土) 08:51:59.71ID:blG/UTRx 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 で排他制御してる
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 で排他制御してる
271263
2019/04/13(土) 09:02:30.89ID:blG/UTRx シングルスレッドでは、sleep 7、としてる間に同時に、
Process.kill :INT, Process.pid
と、自プロセスの命令を実行できない
マルチスレッドなら出来るのだろうが、マルチスレッド・プログラミングはややこしい!
Process.kill :INT, Process.pid
と、自プロセスの命令を実行できない
マルチスレッドなら出来るのだろうが、マルチスレッド・プログラミングはややこしい!
272デフォルトの名無しさん
2019/04/13(土) 09:27:42.11ID:bIdtQ5MW273デフォルトの名無しさん
2019/04/13(土) 09:36:25.97ID:bIdtQ5MW zshの謎な挙動はこれが原因か?
https://fumiyas.github.io/2013/12/05/trap-exit.sh-advent-calendar.html
> でました、zsh の非互換! zsh はシグナルハンドラー※内で終了すると、 EXIT ハンドラーを実行してくれません。酷い。 (※この例では SIGINT のデフォルトのシグナルハンドラー)
> こんな感じで bash, ksh, zsh には微妙な動作の違いがあったりするので、 ちょっと変わったことしようとするときは特に注意しましょう。
https://fumiyas.github.io/2013/12/05/trap-exit.sh-advent-calendar.html
> でました、zsh の非互換! zsh はシグナルハンドラー※内で終了すると、 EXIT ハンドラーを実行してくれません。酷い。 (※この例では SIGINT のデフォルトのシグナルハンドラー)
> こんな感じで bash, ksh, zsh には微妙な動作の違いがあったりするので、 ちょっと変わったことしようとするときは特に注意しましょう。
274デフォルトの名無しさん
2019/04/13(土) 09:39:48.45ID:bIdtQ5MW 読みづらいなw
$ zsh -c '
atexit(){ echo "Bye!"; };
trap atexit EXIT;
trap "trap - EXIT; atexit; exit -1" TERM;
kill -TERM $$
'
$ zsh -c '
atexit(){ echo "Bye!"; };
trap atexit EXIT;
trap "trap - EXIT; atexit; exit -1" TERM;
kill -TERM $$
'
275デフォルトの名無しさん
2019/04/13(土) 11:31:16.12ID:6byp94bf 全てのシェルで適切に終了処理をするって難しいな・・・
276263
2019/04/13(土) 11:39:28.75ID:blG/UTRx Ruby で、at_exit に、終了処理を書いておけばよい
シェルスクリプトで、書く必要がない
シェルスクリプトで、書く必要がない
277デフォルトの名無しさん
2019/04/13(土) 11:55:58.29ID:6byp94bf 時たま出来てしまうゾンビは何が原因なんだろう?
kill -TERM 0 してるから全部死んでくれるはずなんだが・・・
kill -TERM 0 してるから全部死んでくれるはずなんだが・・・
278デフォルトの名無しさん
2019/04/13(土) 11:57:21.41ID:6byp94bf あ、バックグラウンド処理とかしてる
そしてCTRL-Cで強制終了した時の話
ゾンビだから消せなくて困る
そしてCTRL-Cで強制終了した時の話
ゾンビだから消せなくて困る
279デフォルトの名無しさん
2019/04/13(土) 13:02:33.69ID:blG/UTRx ゾンビは、子プロセスが終了して、
OS が、その終了コードをどう扱えば良いのか、わからないから、ひとまず保存している状態
普通なら、子プロセスの終了コードは、親プロセスへ渡されるのかな?
ゾンビが生まれた時に、親プロセスがどうなっているのか?
OS が、その終了コードをどう扱えば良いのか、わからないから、ひとまず保存している状態
普通なら、子プロセスの終了コードは、親プロセスへ渡されるのかな?
ゾンビが生まれた時に、親プロセスがどうなっているのか?
280デフォルトの名無しさん
2019/04/13(土) 14:09:25.74ID:mImzJn5T281デフォルトの名無しさん
2019/04/13(土) 14:29:06.39ID:6byp94bf >>279
その理屈はわかるんだけどねぇ
まず必ずゾンビになるんじゃなくてたまになる。だからタイミングの問題
CTRL-Cを押した時になる。通常の処理では発生しない。
CTRL-Cのハンドラでは作業ディレクトリの削除を行っている。
ワーカー(& によるバックグラウンド処理)が複数ある。サブシェルを使ってるせいか
同じな名前のプロセスがたくさんいる。ワーカーを生成した後はwait(引数なし)を実行している。
ゾンビの存在は確認しているが、誰がゾンビになったのかその親が誰かはよくわかっていない。
(たまにしかならんので探しにくい)ただし内部で呼び出してるtrやmvがゾンビになったこともある。
CTRL-Cのハンドラでは作業ディレクトリの削除の他、多数生きてるワーカー(労働者)を
皆殺しにするためにジェノサイド(kill -TERM 0)を発動している。
ただし労働者を消した後に、労働者の作業場(作業ディレクトリ)も片付ける
必要があるので自分だけは死なないようにしている。(trap ':' TERM)
実際にはもっと複雑だけど、死なないのは自分だけなはずなんだけどな
バグでゾンビになったこともあるので記憶が曖昧だけど
(バグを修正した今は)zshだけしか発生しなくなっているかもしれない。
もしかしたらzsh内蔵のkillにバグがあって殺す順番とか
子供が生まれるタイミングで発生してるとか?
でもまあなんだかんだでシンプルにしていったら
ゾンビの発生率も下がってきたし諦めるかな
その理屈はわかるんだけどねぇ
まず必ずゾンビになるんじゃなくてたまになる。だからタイミングの問題
CTRL-Cを押した時になる。通常の処理では発生しない。
CTRL-Cのハンドラでは作業ディレクトリの削除を行っている。
ワーカー(& によるバックグラウンド処理)が複数ある。サブシェルを使ってるせいか
同じな名前のプロセスがたくさんいる。ワーカーを生成した後はwait(引数なし)を実行している。
ゾンビの存在は確認しているが、誰がゾンビになったのかその親が誰かはよくわかっていない。
(たまにしかならんので探しにくい)ただし内部で呼び出してるtrやmvがゾンビになったこともある。
CTRL-Cのハンドラでは作業ディレクトリの削除の他、多数生きてるワーカー(労働者)を
皆殺しにするためにジェノサイド(kill -TERM 0)を発動している。
ただし労働者を消した後に、労働者の作業場(作業ディレクトリ)も片付ける
必要があるので自分だけは死なないようにしている。(trap ':' TERM)
実際にはもっと複雑だけど、死なないのは自分だけなはずなんだけどな
バグでゾンビになったこともあるので記憶が曖昧だけど
(バグを修正した今は)zshだけしか発生しなくなっているかもしれない。
もしかしたらzsh内蔵のkillにバグがあって殺す順番とか
子供が生まれるタイミングで発生してるとか?
でもまあなんだかんだでシンプルにしていったら
ゾンビの発生率も下がってきたし諦めるかな
282デフォルトの名無しさん
2019/04/13(土) 14:40:48.63ID:6byp94bf うーん、おかしい。trってワーカー(バックグラウンドプロセス)の
中で使っているとはいえ、パイプの右側でしか使ってないんだが?
中で使っているとはいえ、パイプの右側でしか使ってないんだが?
283279
2019/04/13(土) 15:17:27.06ID:blG/UTRx 漏れにも、ゾンビになるプログラムとならないプログラムの、違いがわからない
ゾンビになるメカニズムを検索してみれば?
ゾンビになるメカニズムを検索してみれば?
284デフォルトの名無しさん
2019/04/13(土) 15:21:25.04ID:6byp94bf 「ゾンビになるメカニズム」で検索してみた
管理テーブルにデータが残ってるだけなら
消す方法(もしくは隠す方法)があってもいいと思うんだがねぇ
管理テーブルにデータが残ってるだけなら
消す方法(もしくは隠す方法)があってもいいと思うんだがねぇ
285デフォルトの名無しさん
2019/04/13(土) 16:27:29.48ID:i5T2wQ7z286デフォルトの名無しさん
2019/04/13(土) 16:33:30.75ID:mImzJn5T >>280
>コマンドがINTシグナルで終了した場合、シェルが擬似的にシグナルハンドラ呼んでるっぽいかな(もしくは自らにINTシグナル出してるのかな
違うか。control-cでのINTシグナル送るやつの文献ってどこぞにあるかなあ
>コマンドがINTシグナルで終了した場合、シェルが擬似的にシグナルハンドラ呼んでるっぽいかな(もしくは自らにINTシグナル出してるのかな
違うか。control-cでのINTシグナル送るやつの文献ってどこぞにあるかなあ
287279
2019/04/13(土) 17:05:08.41ID:blG/UTRx Ctrl+C が、子プロセスやパイプラインのジョブグループに、
どのように伝達されていくかとか、難しい
どのように伝達されていくかとか、難しい
288デフォルトの名無しさん
2019/04/13(土) 17:21:22.57ID:6byp94bf いろいろ間違っていた。訂正する。
まずCTRL-Cは関係なさそう。実は正常な動作でも(プログラム実行中に)ゾンビができることがあった。
ゾンビができると今は無限ループ状態になるので気づいたが、ちょっと前まではプログラムの構造上、
ゾンビを放置して正常終了していたと思う。zshではあまりテストしていなかったから気づかなかった。
バックグラウンドプロセスが関係あるかないかはよくわからない。
何回か動かしているがバックグラウンドプロセスを使用しない場合は今の所再現していない。
あとなんかWSLとのからみな気がしてきた。
速度が違うから断定は出来ないがLinuxだと再現しない。
今の所、WSL環境にて、zshで、バックグラウンドプロセスを使用し、
その中でパイプを使った処理を行うと、まれにゾンビプロセスができる。
まずCTRL-Cは関係なさそう。実は正常な動作でも(プログラム実行中に)ゾンビができることがあった。
ゾンビができると今は無限ループ状態になるので気づいたが、ちょっと前まではプログラムの構造上、
ゾンビを放置して正常終了していたと思う。zshではあまりテストしていなかったから気づかなかった。
バックグラウンドプロセスが関係あるかないかはよくわからない。
何回か動かしているがバックグラウンドプロセスを使用しない場合は今の所再現していない。
あとなんかWSLとのからみな気がしてきた。
速度が違うから断定は出来ないがLinuxだと再現しない。
今の所、WSL環境にて、zshで、バックグラウンドプロセスを使用し、
その中でパイプを使った処理を行うと、まれにゾンビプロセスができる。
289デフォルトの名無しさん
2019/04/13(土) 17:27:02.88ID:i5T2wQ7z290デフォルトの名無しさん
2019/04/13(土) 17:36:42.95ID:mImzJn5T291デフォルトの名無しさん
2019/04/13(土) 17:43:50.87ID:6byp94bf 再現コード出来た。このコード、なにか問題有る?
これを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
これを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デフォルトの名無しさん
2019/04/13(土) 17:44:42.87ID:6byp94bf やっぱり詳解Unixは買わねばいかんか・・・
293デフォルトの名無しさん
2019/04/13(土) 17:54:41.69ID:6byp94bf dash、bashでは再現しない。kshでも再現した。
いずれもWSLのみ。これもうWSLの問題だろ・・・
きっとWSLのバグをzshとkshが踏んじゃったんだな
いずれもWSLのみ。これもうWSLの問題だろ・・・
きっとWSLのバグをzshとkshが踏んじゃったんだな
294デフォルトの名無しさん
2019/04/13(土) 17:55:48.18ID:6byp94bf これ関連してるのかな?
Why are there many zombie process in windows subsystem for linux(WSL)? How to kill them totally?
https://superuser.com/questions/1419292/why-are-there-many-zombie-process-in-windows-subsystem-for-linuxwsl-how-to-ki
Why are there many zombie process in windows subsystem for linux(WSL)? How to kill them totally?
https://superuser.com/questions/1419292/why-are-there-many-zombie-process-in-windows-subsystem-for-linuxwsl-how-to-ki
295デフォルトの名無しさん
2019/04/13(土) 18:09:57.29ID:6byp94bf 次のWindows 10のリリースで治ってんじゃないですかねー
もういいか
Zombie zsh processes left behind that consume 8 % CPU each
https://github.com/Microsoft/WSL/issues/3940
Killing a defunct zombie leaks the zombie process forever
https://github.com/Microsoft/WSL/issues/3741
https://docs.microsoft.com/en-us/windows/wsl/release-notes#build-18267
Fix issue where zombie process may not be reaped and remain indefinitely.
もういいか
Zombie zsh processes left behind that consume 8 % CPU each
https://github.com/Microsoft/WSL/issues/3940
Killing a defunct zombie leaks the zombie process forever
https://github.com/Microsoft/WSL/issues/3741
https://docs.microsoft.com/en-us/windows/wsl/release-notes#build-18267
Fix issue where zombie process may not be reaped and remain indefinitely.
296デフォルトの名無しさん
2019/04/14(日) 14:12:09.49ID:uU4FE3J6 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とはまた違った挙動だ。
とゆうかどういう仕様なんだろう?
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デフォルトの名無しさん
2019/04/14(日) 17:50:16.12ID:21MN1CXY $ 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 に書いてあるよ。
$ # 簡単に言うと、単語の分割というのは最初に行われるものと
$ # 変数が展開された後に行われるものがあるんだ。
$
#!/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デフォルトの名無しさん
2019/04/15(月) 17:41:03.59ID:ZXb+3x2v シェルスクリプト(対話操作含め)が実行される手順って結構複雑な割に他の言語よりずっと単純だから
理論から実践(この場合はシステム処理とか?)への、かなり良い足掛かりになるよね。
理論から実践(この場合はシステム処理とか?)への、かなり良い足掛かりになるよね。
299デフォルトの名無しさん
2019/04/21(日) 01:20:29.51ID:Has+aDs1 http://www.sample/{01..10}.jpg
これが書かれたtxtを読み込んでブレース展開して出力する方法ないです?
$ printf "%s\n" < foo.txt
適当にこうやっても上手く行かなくて
これが書かれたtxtを読み込んでブレース展開して出力する方法ないです?
$ printf "%s\n" < foo.txt
適当にこうやっても上手く行かなくて
300デフォルトの名無しさん
2019/04/21(日) 01:26:56.31ID:S3Y2FMky ないです
301デフォルトの名無しさん
2019/04/21(日) 01:40:13.99ID:0pnJkrzy eval $(echo -n 'echo '; cat foo.txt) とか?
302デフォルトの名無しさん
2019/04/21(日) 02:15:47.05ID:FhppS/ri sh << END
printf "%s\n" $(cat foo.txt)
END
printf "%s\n" $(cat foo.txt)
END
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【次の一手】台湾問題で小林よしのり氏が私見「まさに戦争前夜」「ただちに徴兵制を敷いて、高市支持者を最前線へ」… ★5 [BFU★]
- 「母の部屋に安倍氏が表紙の機関誌が」「(安倍氏が被害者なのは)不思議に思いませんでした」山上被告の妹が証言 [おっさん友の会★]
- 【野球】大谷翔平、佐々木朗希、山本由伸らがWBC辞退なら広がる不協和音… 『過去イチ盛り上がらない大会』になる可能性も★2 [冬月記者★]
- 【news23】小川彩佳アナ「ここまでの広がりになるということを、高市総理はどれだけ想像できていたんでしょうね」 日中問題特集で [冬月記者★]
- 【国際】ロシアはすでに戦争準備段階――ポーランド軍トップが警告 [ぐれ★]
- 「町中華」の“息切れ倒産”が増加 ブームにも支えられ職人技で踏ん張ってきたが… 大手チェーンは値上げでも絶好調 [ぐれ★]
- 中国人「高市早苗が首相になってからの日本での中国人観光客の1日がこれらしいw」中国でバカウケ [165981677]
- 【高市売り】円安、止まらず!凄い勢いで暴落中。157円へ [219241683]
- 【悲報】ヤフコメ民「中国が水産物を輸入禁止にするなら、日本国民向けに安く販売すればいい。中国依存から脱するべき」 [153736977]
- >>3と>>5のワードを使ってai生成する
- 1,000万円のBMWに擦ってしまった札幌のガキ、捕らえられてガチで詰む [329329848]
- ガバガバなんだよ
