シェルスクリプトに関する総合スレッドです。
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。
シェルスクリプト総合 その33
https://mevius.5ch.net/test/read.cgi/tech/1584893550/
探検
シェルスクリプト総合 その34
レス数が950を超えています。1000を超えると書き込みができなくなります。
2020/08/21(金) 15:17:55.64ID:mArnj/tT
871デフォルトの名無しさん
2020/11/13(金) 18:21:34.11ID:A88QmKc9872デフォルトの名無しさん
2020/11/13(金) 18:22:01.01ID:A88QmKc9873デフォルトの名無しさん
2020/11/13(金) 18:27:23.64ID:A88QmKc9 自分の体験談を言えばいいだけだと思うんだがねぇ
たまたま自分のアプリで LD_LIBRARY_PATHという変数を使っていたら
これと同じ環境変数を○○アプリが使っていて困りましたとかさぁ
実際の体験談ね。架空の体験談じゃなくてw
たまたま自分のアプリで LD_LIBRARY_PATHという変数を使っていたら
これと同じ環境変数を○○アプリが使っていて困りましたとかさぁ
実際の体験談ね。架空の体験談じゃなくてw
874デフォルトの名無しさん
2020/11/13(金) 19:29:50.68ID:du2laNOa PATHを書き換えて、コマンドサーチパスの優先順位変わって意図しないバージョンのコマンドを実行してしまって、コマンドの互換性に問題あって、大事なファイルを破壊してしまったとか
そういうのはあるんじゃない
そういうのはあるんじゃない
875デフォルトの名無しさん
2020/11/13(金) 19:55:53.16ID:A88QmKc9876デフォルトの名無しさん
2020/11/13(金) 21:49:53.46ID:uCeIaRFr877デフォルトの名無しさん
2020/11/14(土) 00:25:29.47ID:ZrW/GOpe878デフォルトの名無しさん
2020/11/14(土) 00:37:43.34ID:3AniUInE879デフォルトの名無しさん
2020/11/14(土) 12:11:16.48ID:ZrW/GOpe ここまで問いつめて一つも実例が出ない……。
あのね,自分の考えを矯正せざるえない正しい情報は耳障りかも知れないけど,
もう一度聞いてくれ。
「環境変数(⊂シェル変数)を外部から書き換えて,システムに損害を及ぼす」
ことは可能だけど,
シェル引数がプロセス間でどう引き継がれるかというのはPOSIXで定められていて,
要すれば「変数の書き換えの影響が及ぶのはその書き換え後にそのプロセスから
遂行したシェル(スクリプト)のみ」っていう決まりなのよ。
で,「変数を書き換えるとシステムに損害を及ぼす」ようなシェルスクリプトっていうのは
「システムを管理するシェルスクリプト」であって,
そんなシェルスクリプトを「遂行する前に」変数を書き換えられるような状態においては,
もはや「環境変数の書き換え」なんていう攻撃℃闥iを取らなくても,
簡単にシステムをぶっ壊せる。
逆に例えばマトモな許可設定がなされてるサーバーに対して,
クライアントが環境変数を書き換えてサーバーのシステムを壊すなんてことはできない。
あのね,自分の考えを矯正せざるえない正しい情報は耳障りかも知れないけど,
もう一度聞いてくれ。
「環境変数(⊂シェル変数)を外部から書き換えて,システムに損害を及ぼす」
ことは可能だけど,
シェル引数がプロセス間でどう引き継がれるかというのはPOSIXで定められていて,
要すれば「変数の書き換えの影響が及ぶのはその書き換え後にそのプロセスから
遂行したシェル(スクリプト)のみ」っていう決まりなのよ。
で,「変数を書き換えるとシステムに損害を及ぼす」ようなシェルスクリプトっていうのは
「システムを管理するシェルスクリプト」であって,
そんなシェルスクリプトを「遂行する前に」変数を書き換えられるような状態においては,
もはや「環境変数の書き換え」なんていう攻撃℃闥iを取らなくても,
簡単にシステムをぶっ壊せる。
逆に例えばマトモな許可設定がなされてるサーバーに対して,
クライアントが環境変数を書き換えてサーバーのシステムを壊すなんてことはできない。
880デフォルトの名無しさん
2020/11/14(土) 12:14:10.37ID:ZrW/GOpe はぁ〜〜無駄な熱量を使っちまった……
バカは放っておくのが一番なのは理解しているんだが,
初学者がもしもこのバカの発言を間に受けたら
勉強が進んで己の知識を修正するまで
間違った知識で行動する訳で,それは可哀そうなのでね。
バカは放っておくのが一番なのは理解しているんだが,
初学者がもしもこのバカの発言を間に受けたら
勉強が進んで己の知識を修正するまで
間違った知識で行動する訳で,それは可哀そうなのでね。
881デフォルトの名無しさん
2020/11/14(土) 12:19:51.30ID:WE59Iknb シェルスクリプトはセキュリティホール
揺るぎない真実に向き合え
揺るぎない真実に向き合え
882デフォルトの名無しさん
2020/11/14(土) 12:30:38.87ID:kdUuCuZx >>879
攻撃の話はしてないよ
単に環境変数を書き換えることで他のプロセスに影響を与えることはできるけど
そもそもその環境変数なんてわずかしかないんだから
大騒ぎするまでのことはないよねって話してる
それに対して問題がー、問題がーってしつこく言ってるやつが居るから
お前実際にどんな問題が起きたことあるんだ?って聞いてるんだが
その答えは帰ってこないし、帰ってきてもそれだけだよね?程度の話だった
これがここまでの結論
攻撃の話はしてないよ
単に環境変数を書き換えることで他のプロセスに影響を与えることはできるけど
そもそもその環境変数なんてわずかしかないんだから
大騒ぎするまでのことはないよねって話してる
それに対して問題がー、問題がーってしつこく言ってるやつが居るから
お前実際にどんな問題が起きたことあるんだ?って聞いてるんだが
その答えは帰ってこないし、帰ってきてもそれだけだよね?程度の話だった
これがここまでの結論
883デフォルトの名無しさん
2020/11/14(土) 12:35:19.46ID:QzputhfI 日本語がぎこちないので ID:ZrW/GOpe は馬鹿確定
884デフォルトの名無しさん
2020/11/14(土) 13:34:21.21ID:ZrW/GOpe 知識で勝てなくて悔しいのう
885デフォルトの名無しさん
2020/11/14(土) 13:42:24.75ID:5XkrS48F 俺が実際どんな問題があった?って聞いてるんだから
俺の話を横取りするな
俺の話を横取りするな
886デフォルトの名無しさん
2020/11/14(土) 14:45:22.49ID:i/Cc0DGY 自分も具体例を聞きたい
887デフォルトの名無しさん
2020/11/14(土) 14:48:05.38ID:DnZAmAgg ワイもワイも
888デフォルトの名無しさん
2020/11/14(土) 15:46:11.26ID:hNMhXONs セキュリティの問題ではないけど
PWDをシェルスクリプトの中で変数として使うと
システムに勝手に書き変えられて
思ったように動かないかもしれないな
PWDをシェルスクリプトの中で変数として使うと
システムに勝手に書き変えられて
思ったように動かないかもしれないな
889デフォルトの名無しさん
2020/11/14(土) 21:48:21.52ID:9DKCECFD 責任の遂行
890デフォルトの名無しさん
2020/11/14(土) 23:28:38.65ID:ZrW/GOpe891デフォルトの名無しさん
2020/11/14(土) 23:40:33.62ID:1QU8t+0x シェルスクリプト以外でPWDを使うことってあるんだろうか?
そもそもPWDはシェル変数ではあるが環境変数なのか?
他の言語でPWDがあることを前提としていいのだろうか?
またシェルスクリプトとかでは起動時に現在のカレントディレクトリに
設定されると思うので影響があるのは自分自身だけだろうな
そもそもPWDはシェル変数ではあるが環境変数なのか?
他の言語でPWDがあることを前提としていいのだろうか?
またシェルスクリプトとかでは起動時に現在のカレントディレクトリに
設定されると思うので影響があるのは自分自身だけだろうな
892デフォルトの名無しさん
2020/11/15(日) 09:04:33.27ID:bhsguIlX ん? 相対名でファイルをオープンするときとかどうなってると?
893デフォルトの名無しさん
2020/11/15(日) 11:54:09.26ID:ofPGnU/6 >>892
PWDはただのカレントディレクトリを
変数に入れただけだよ
カレントディレクトリのことではない
cdしたときにシェル変数PWDとOLDPWDに
カレントディレクトリを入れるだけのこと
他の言語ではPWDやOLDPWDは参照しない
環境変数でしかないから
PWDはただのカレントディレクトリを
変数に入れただけだよ
カレントディレクトリのことではない
cdしたときにシェル変数PWDとOLDPWDに
カレントディレクトリを入れるだけのこと
他の言語ではPWDやOLDPWDは参照しない
環境変数でしかないから
894デフォルトの名無しさん
2020/11/15(日) 18:03:22.63ID:h835C+/M ていうかシェルでもPWDを参照することは少ないでしょう。
「カレントディレクトリ」を指し示したかったらpwdを使うかな。
ちなみに,当然分かっているとは思うけど,
C言語やPythonでも$PWDは参照できる。
ただまぁ,それをやってるプログラムは,$PWDを参照している
シェルスクリプトと同じくらい数少ないと思うけどね。
「カレントディレクトリ」を指し示したかったらpwdを使うかな。
ちなみに,当然分かっているとは思うけど,
C言語やPythonでも$PWDは参照できる。
ただまぁ,それをやってるプログラムは,$PWDを参照している
シェルスクリプトと同じくらい数少ないと思うけどね。
895デフォルトの名無しさん
2020/11/15(日) 18:36:18.33ID:bhsguIlX なるほど。
カレントディレクトリを知りたいときにPWDを参照したら楽かもねってだけか。
それ以外には影響を及ぼさない。
勝手にPWDに依存するスクリプトやコマンドはあるかもしれんがw
カレントディレクトリを知りたいときにPWDを参照したら楽かもねってだけか。
それ以外には影響を及ぼさない。
勝手にPWDに依存するスクリプトやコマンドはあるかもしれんがw
896デフォルトの名無しさん
2020/11/15(日) 18:41:31.75ID:ofPGnU/6 え?普通$PWDの方を使うでしょ
pwdにメリットなんてあるの?
デメリットならいくつか言える
外部コマンドなので遅い
ほどんどの場合、結局変数に入れて使う
変数に入れる時に標準出力経由でやるから更に遅い
変数展開が使えないから、/foo/bar/baz からbazだけを取るのが面倒で遅い
(まずありえないけど)改行で終わるディレクトリが正しく取れない(工夫すれば取れるけど)
唯一のメリットはPWDの内容と実際のカレントディレクトリが違う場合が
あることだけど、PWDはシェルスクリプト起動時に初期化されるので
意図的に変更しないとそうはならない。どうしてもPWDを
カレントディレクトリに初期化したいなら cd . でも実行すればいい
> C言語やPythonでも$PWDは参照できる。
それはPWDが環境変数としてエクスポートされてる場合でしょ?
unset PWDしてから起動しても参照できるって保証はあるの?
pwdにメリットなんてあるの?
デメリットならいくつか言える
外部コマンドなので遅い
ほどんどの場合、結局変数に入れて使う
変数に入れる時に標準出力経由でやるから更に遅い
変数展開が使えないから、/foo/bar/baz からbazだけを取るのが面倒で遅い
(まずありえないけど)改行で終わるディレクトリが正しく取れない(工夫すれば取れるけど)
唯一のメリットはPWDの内容と実際のカレントディレクトリが違う場合が
あることだけど、PWDはシェルスクリプト起動時に初期化されるので
意図的に変更しないとそうはならない。どうしてもPWDを
カレントディレクトリに初期化したいなら cd . でも実行すればいい
> C言語やPythonでも$PWDは参照できる。
それはPWDが環境変数としてエクスポートされてる場合でしょ?
unset PWDしてから起動しても参照できるって保証はあるの?
897デフォルトの名無しさん
2020/11/15(日) 18:43:40.53ID:ofPGnU/6 pwdはカレントディレクトリを画面に表示するだけのときにしか使わないな
カレントディレクトリを利用する(変数に入れる)場合は$PWDを使う
カレントディレクトリを利用する(変数に入れる)場合は$PWDを使う
898デフォルトの名無しさん
2020/11/15(日) 18:45:36.14ID:QB7zB470 https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html
> PWD
> Set by the shell and by the cd utility. (...) Assignments to this variable may be ignored.
> PWD
> Set by the shell and by the cd utility. (...) Assignments to this variable may be ignored.
899デフォルトの名無しさん
2020/11/15(日) 18:47:38.69ID:h7nWKXR3 $ mkdir x
$ ln -s x y
$ cd y
$ pwd
/work/tmp/y
$ echo $PWD
/work/tmp/y
$ pwd -P
/work/tmp/x
$ ln -s x y
$ cd y
$ pwd
/work/tmp/y
$ echo $PWD
/work/tmp/y
$ pwd -P
/work/tmp/x
900デフォルトの名無しさん
2020/11/15(日) 18:50:20.68ID:ofPGnU/6 書いておいてなんだけど、改行で終わるディレクトリなんて作ったことないからやってみたw
cd /tmp
mkdir "abc
"
こんな感じで普通に作れるね。移動して(移動するときも cd "abc
" ってやらないとだめw)
echo "[$PWD]" したらちゃんと改行が入ってる
pwdもコマンド打つだけなら改行が入ってるけど
dir=$(pwd) とかすると末尾の改行が消えてdir変数に入る
回避方法は dir=$(pwd; echo _); dir=${dir%_} とすること
末尾の改行が消えないように _ とかを追加しておいて、変数展開を使って消す
cd /tmp
mkdir "abc
"
こんな感じで普通に作れるね。移動して(移動するときも cd "abc
" ってやらないとだめw)
echo "[$PWD]" したらちゃんと改行が入ってる
pwdもコマンド打つだけなら改行が入ってるけど
dir=$(pwd) とかすると末尾の改行が消えてdir変数に入る
回避方法は dir=$(pwd; echo _); dir=${dir%_} とすること
末尾の改行が消えないように _ とかを追加しておいて、変数展開を使って消す
901デフォルトの名無しさん
2020/11/15(日) 18:53:44.48ID:ofPGnU/6 >>898
> Assignments to this variable **may** be ignored
つまり無視されるかもしれないし、無視されないかもしれないってことね。
事実 PWD にカレントディレクトリと異なる値を入れることはほとんどのシェルで可能
> Assignments to this variable **may** be ignored
つまり無視されるかもしれないし、無視されないかもしれないってことね。
事実 PWD にカレントディレクトリと異なる値を入れることはほとんどのシェルで可能
902デフォルトの名無しさん
2020/11/15(日) 18:56:56.26ID:ofPGnU/6 >>899
何がいいたいのか知らんけど、
pwd -P の結果をPWDを使わずにほしいという話なら
cd -P を実行すればいいよ
dir=$(pwd -P) ・・・ 外部コマンド(遅い)+コマンド置換(遅い)
で二重に遅くなるけど
cd -P; dir=$PWD なら 内部コマンド(速い)+コマンド置換なし(速い)
カレントディレクトリが移動してしまうという副作用があるけど必要なら戻せばいい
何がいいたいのか知らんけど、
pwd -P の結果をPWDを使わずにほしいという話なら
cd -P を実行すればいいよ
dir=$(pwd -P) ・・・ 外部コマンド(遅い)+コマンド置換(遅い)
で二重に遅くなるけど
cd -P; dir=$PWD なら 内部コマンド(速い)+コマンド置換なし(速い)
カレントディレクトリが移動してしまうという副作用があるけど必要なら戻せばいい
903デフォルトの名無しさん
2020/11/15(日) 18:57:41.90ID:ofPGnU/6 訂正
pwd -P の結果をpwdを使わずにほしいという話なら
cd -P を実行すればいいよ
pwd -P の結果をpwdを使わずにほしいという話なら
cd -P を実行すればいいよ
904デフォルトの名無しさん
2020/11/15(日) 19:02:15.10ID:h7nWKXR3 bash$ type pwd
pwd is a shell builtin
pwd is a shell builtin
905デフォルトの名無しさん
2020/11/15(日) 19:03:42.80ID:ofPGnU/6 お、pwdはビルトインコマンドだったかw
じゃあそこは訂正
コマンド置換になるから遅い だけだな
これで数千倍ぐらい遅くなる
じゃあそこは訂正
コマンド置換になるから遅い だけだな
これで数千倍ぐらい遅くなる
906デフォルトの名無しさん
2020/11/15(日) 19:16:41.84ID:h7nWKXR3 $ dash
$ readonly PWD
$ cd x
dash: 3: cd: PWD: is read only
$ echo $PWD
$ /home/hoge
$ pwd
$ /home/hoge/x
$ readonly PWD
$ cd x
dash: 3: cd: PWD: is read only
$ echo $PWD
$ /home/hoge
$ pwd
$ /home/hoge/x
907デフォルトの名無しさん
2020/11/15(日) 19:20:48.28ID:ofPGnU/6908デフォルトの名無しさん
2020/11/15(日) 19:23:24.34ID:h7nWKXR3 お遊びに付きあってあげているだけさ。気にするなよw
909デフォルトの名無しさん
2020/11/16(月) 02:15:26.25ID:4uoBNdLM910デフォルトの名無しさん
2020/11/16(月) 09:46:48.16ID:VPqCGhU1911デフォルトの名無しさん
2020/11/16(月) 10:42:21.57ID:ZICsfNV8 > readonly PWDされても問題ないし。
readonly するのは誰?
いや、自分でやっておいて
誰かにreadonly されたー!って叫ぶのかなと(笑)
readonly するのは誰?
いや、自分でやっておいて
誰かにreadonly されたー!って叫ぶのかなと(笑)
912デフォルトの名無しさん
2020/11/16(月) 12:53:31.23ID:sF1WJXNT 改行コードってディレクトリ名とかファイル名の禁止文字じゃないのかω
勉強になったわωω
勉強になったわωω
913デフォルトの名無しさん
2020/11/16(月) 13:39:21.12ID:IuVgP+7M findとかxargsとか
改行コードが禁止文字じゃないから
1行1ファイル名にできなくて
仕方なくNULL文字区切りができたんだよな
1行1ファイル名ならそんな機能いらなかったのに
NULL文字区切りって改行対策だけの機能だから
改行コードが禁止文字じゃないから
1行1ファイル名にできなくて
仕方なくNULL文字区切りができたんだよな
1行1ファイル名ならそんな機能いらなかったのに
NULL文字区切りって改行対策だけの機能だから
914デフォルトの名無しさん
2020/11/16(月) 14:00:41.03ID:Ks5/uhC8915デフォルトの名無しさん
2020/11/16(月) 15:33:23.40ID:VPqCGhU1916デフォルトの名無しさん
2020/11/16(月) 15:35:18.75ID:VPqCGhU1917デフォルトの名無しさん
2020/11/16(月) 16:02:01.39ID:UFAKJ9cA918デフォルトの名無しさん
2020/11/16(月) 16:20:12.32ID:T0PHjpz3 >>916
-execはファイル一個ごとですよね、と一瞬思ったけど、
それが気になる場合は {} + ですか。
しかし {} + って昔からあった?
ネットで見つけた4.3BSDのマニュアルには {} + の記述はないっぽい。
http://www.retro11.de/ouxr/43bsd/usr/man/cat1/find.0.html
-execはファイル一個ごとですよね、と一瞬思ったけど、
それが気になる場合は {} + ですか。
しかし {} + って昔からあった?
ネットで見つけた4.3BSDのマニュアルには {} + の記述はないっぽい。
http://www.retro11.de/ouxr/43bsd/usr/man/cat1/find.0.html
919デフォルトの名無しさん
2020/11/16(月) 16:53:12.65ID:VPqCGhU1920デフォルトの名無しさん
2020/11/16(月) 17:48:34.34ID:EzTwR9A1 PWD を環境変数にするという発想は無かったな。
しちゃいかんとまでは思わないが意義があるとも思わない。
しちゃいかんとまでは思わないが意義があるとも思わない。
921デフォルトの名無しさん
2020/11/16(月) 20:06:37.21ID:Ks5/uhC8922デフォルトの名無しさん
2020/11/16(月) 20:09:53.39ID:Ks5/uhC8923デフォルトの名無しさん
2020/11/16(月) 21:47:14.87ID:was5dDeL924デフォルトの名無しさん
2020/11/16(月) 21:47:38.57ID:VPqCGhU1 readコマンドと同じようなことを,変数を新たに生成することなく実現する方法ないかな。
当然,入力結果は変数に格納せずに,そのまま標準出力に返す。
(←べつにこの仕様じゃなきゃいけない訳じゃないけど,変数なしだとこれくらいしかないかな?)
例えば引数を付けないcatだと近い挙動を実現できるけど,
入力を終了する時に<Enter>じゃなくて<C-D>を入力しないといけないので,
利用者側の操作が違ってきちゃう。
↑このあたり,sttyとかで設定できないかな〜と思いつつも,
stty eof ^Jとかしても無理なんで詰まっている。
当然,入力結果は変数に格納せずに,そのまま標準出力に返す。
(←べつにこの仕様じゃなきゃいけない訳じゃないけど,変数なしだとこれくらいしかないかな?)
例えば引数を付けないcatだと近い挙動を実現できるけど,
入力を終了する時に<Enter>じゃなくて<C-D>を入力しないといけないので,
利用者側の操作が違ってきちゃう。
↑このあたり,sttyとかで設定できないかな〜と思いつつも,
stty eof ^Jとかしても無理なんで詰まっている。
925デフォルトの名無しさん
2020/11/16(月) 21:56:03.84ID:was5dDeL 変数を新たに生成しないなら、決め打ちのグローバル変数を使ったら?
それも嫌ならPS1とかPS2を使うとかw
どうせシェルスクリプトの中では使わないだろうし
それも嫌ならPS1とかPS2を使うとかw
どうせシェルスクリプトの中では使わないだろうし
926デフォルトの名無しさん
2020/11/16(月) 22:19:15.08ID:was5dDeL お、思いついたw
read workとやってwork変数を使う
だけどそうすると上書きされちゃうから
set -- "$work"として$1にバックアップしておく
そいでecho "$work"してから$1を$workに戻す
ただしwork変数はread前に定義されてない可能性があるから
そこは変数が定義されてるかどうかで処理を分ける(めんどくさいから任せたw)
これで一時的には変数を使うけど使うけど最終的に副作用はない
read workとやってwork変数を使う
だけどそうすると上書きされちゃうから
set -- "$work"として$1にバックアップしておく
そいでecho "$work"してから$1を$workに戻す
ただしwork変数はread前に定義されてない可能性があるから
そこは変数が定義されてるかどうかで処理を分ける(めんどくさいから任せたw)
これで一時的には変数を使うけど使うけど最終的に副作用はない
927デフォルトの名無しさん
2020/11/16(月) 22:20:25.71ID:was5dDeL この方法を使えばreadの結果を$1とかに入れることもできそうw
928デフォルトの名無しさん
2020/11/16(月) 23:22:53.16ID:9mrX0/C/929デフォルトの名無しさん
2020/11/16(月) 23:44:35.69ID:VPqCGhU1930デフォルトの名無しさん
2020/11/17(火) 09:06:13.86ID:iIrFjUs6 Macは昔は:がフォルダの区切り文字だったんだよな
ファイルのリソース情報が本体ファイルと別になってて2個1だった
ファイルのリソース情報が本体ファイルと別になってて2個1だった
931デフォルトの名無しさん
2020/11/17(火) 10:59:29.50ID:BpUAWx5v >>921
macOSのファイルシステムはユニコードで規定されているのでそういうチェックも
あるというか。
ま、ある意味文字列の中身を厳密に規定しないできた流れのFSと、
ユニコードの普及を推進していた(る)会社が作ったFSの違いかな?
macOSのファイルシステムはユニコードで規定されているのでそういうチェックも
あるというか。
ま、ある意味文字列の中身を厳密に規定しないできた流れのFSと、
ユニコードの普及を推進していた(る)会社が作ったFSの違いかな?
932デフォルトの名無しさん
2020/11/17(火) 16:59:32.69ID:RPD3bx3d ちなみにWindows 10ではクソみたいな方法で,*一見すると*コロンや不等号を
ファイルに名付けられるような仕様になっている。
https://youtu.be/vE8jL9Fz9h0
誰得なのこの機能?
ファイルに名付けられるような仕様になっている。
https://youtu.be/vE8jL9Fz9h0
誰得なのこの機能?
933デフォルトの名無しさん
2020/11/17(火) 17:09:47.51ID:nHdTOcnh >>932
誰得もなにも動画のとおりだろ
NTFSではPOSIX対応が必要だったため、本来はコロンとかを
ファイル名に入れられるんだがWindowsでは互換性のために禁止されてる
しかしWSLの登場でコロンや不等号のファイル名に対応する必要が出てきた
誰得ってのはこのWSLユーザーに決まってる
NTFSではこれらの文字を使おうと思えば使えるのだが、それだと相互運用で問題が出る
だからWSLでコロン等をファイル名に使ったら、Unicodeの特殊な文字に名前を変更して記録している
そしてこの仕様はもともとCygwinで考え出されたものだ
WindowsでLinux的に使おうとすれば、どうしてもそういう文字に対応する必要があるので
Cygwinで考え出された仕組みをWSLでそのまま取り入れてるだけ
誰得もなにも動画のとおりだろ
NTFSではPOSIX対応が必要だったため、本来はコロンとかを
ファイル名に入れられるんだがWindowsでは互換性のために禁止されてる
しかしWSLの登場でコロンや不等号のファイル名に対応する必要が出てきた
誰得ってのはこのWSLユーザーに決まってる
NTFSではこれらの文字を使おうと思えば使えるのだが、それだと相互運用で問題が出る
だからWSLでコロン等をファイル名に使ったら、Unicodeの特殊な文字に名前を変更して記録している
そしてこの仕様はもともとCygwinで考え出されたものだ
WindowsでLinux的に使おうとすれば、どうしてもそういう文字に対応する必要があるので
Cygwinで考え出された仕組みをWSLでそのまま取り入れてるだけ
934デフォルトの名無しさん
2020/11/17(火) 17:55:26.97ID:WUYxAqUP935デフォルトの名無しさん
2020/11/17(火) 18:03:09.09ID:nHdTOcnh 普通にcygwinで:というファイル名を作ったら
Windowsからはどう見えるんだ?って調べればわかることだな
もう何年も前の話だよ
俺にとってはWSLでも同じでワロタ状態
Windowsからはどう見えるんだ?って調べればわかることだな
もう何年も前の話だよ
俺にとってはWSLでも同じでワロタ状態
936デフォルトの名無しさん
2020/11/17(火) 18:05:47.61ID:nHdTOcnh あとwslpathコマンドも、昔からCygwinにcygpathというコマンドがあるのを知っていれば
同じような仕組みにしたのねって思うはず
MS独自の仕組みじゃなくて既存の仕組みを流用する当たり
今のMSがオープン的な考えになってることがよく分かる
同じような仕組みにしたのねって思うはず
MS独自の仕組みじゃなくて既存の仕組みを流用する当たり
今のMSがオープン的な考えになってることがよく分かる
937デフォルトの名無しさん
2020/11/17(火) 18:34:05.16ID:J3+TnR7G 全角文字使えは解決するのにな
938デフォルトの名無しさん
2020/11/17(火) 18:44:18.62ID:8pwQehN5 全角と半角を同一視したらダメだろ
だから通常使われてない文字にわざわざしてるんだが
だから通常使われてない文字にわざわざしてるんだが
939デフォルトの名無しさん
2020/11/17(火) 19:02:58.91ID:J3+TnR7G ファイル履歴「せやな…」
940デフォルトの名無しさん
2020/11/17(火) 20:36:01.00ID:RPD3bx3d wslpathがcygpathと同じ仕組みなのってなんで分かったん?
いや,つっかかる訳じゃなくて,
wslpathってソース公開されてないからさ。
いや,つっかかる訳じゃなくて,
wslpathってソース公開されてないからさ。
941デフォルトの名無しさん
2020/11/17(火) 20:46:02.57ID:/MJ+K6rY a.txt
a x Nov 17 2020 aaa
b x Nov 18 2020 bbb
c z Nov 19 2020 ccc
cat a.txt | awk -v hy="-" '{if("$2"=="x"){"date -d "$3hy$4hy$5" ¥"+%Y-%M-%D¥" | getline var ; print $1","var","$6}}'
これ実行するとvarの内容がたまに前の行の値のままになったりするんだけど
|が悪いの?
結局 while IFS=' ' read 〜に変えたらやりたいことはできたけと何故上手くいかなかったのか分からなくて
a x Nov 17 2020 aaa
b x Nov 18 2020 bbb
c z Nov 19 2020 ccc
cat a.txt | awk -v hy="-" '{if("$2"=="x"){"date -d "$3hy$4hy$5" ¥"+%Y-%M-%D¥" | getline var ; print $1","var","$6}}'
これ実行するとvarの内容がたまに前の行の値のままになったりするんだけど
|が悪いの?
結局 while IFS=' ' read 〜に変えたらやりたいことはできたけと何故上手くいかなかったのか分からなくて
942デフォルトの名無しさん
2020/11/17(火) 21:02:17.75ID:8pwQehN5 >>940
コロンとかのファイル名の話な(これはwslpathやcygpathとは関係ない)
cygwin「cygwin環境でHOME以下に作ったファイルはC:\cygwin64\home以下に作るで」
cygwin「 cygwin環境で : とか * という名前のファイル作れるで」
10年前の俺「え?なんで?エクスプローラーから見たら文字化けしとるやんけwww なんだこりゃ」
数分後 → 「ふーん」
WSL「/mnt/c/Users以下に作ったファイルはC:\Users以下に作るで」
WSL「WSL環境で : とか * という名前のファイル作れるで」
俺「エクスプローラーから見たら文字化けしとるやんけwww 既視感ぱねぇwww」
数分後 → 「同じじゃねーかwww」
wslpathは別にcygpath使ってればコマンド名とかオプションとか真似してるってわかるだろ?
WSL(Linux)にパスを変換するときのオプションが何故か-uな所とか
(cygwinでは-uの長いオプション名は--unix)
コロンとかのファイル名の話な(これはwslpathやcygpathとは関係ない)
cygwin「cygwin環境でHOME以下に作ったファイルはC:\cygwin64\home以下に作るで」
cygwin「 cygwin環境で : とか * という名前のファイル作れるで」
10年前の俺「え?なんで?エクスプローラーから見たら文字化けしとるやんけwww なんだこりゃ」
数分後 → 「ふーん」
WSL「/mnt/c/Users以下に作ったファイルはC:\Users以下に作るで」
WSL「WSL環境で : とか * という名前のファイル作れるで」
俺「エクスプローラーから見たら文字化けしとるやんけwww 既視感ぱねぇwww」
数分後 → 「同じじゃねーかwww」
wslpathは別にcygpath使ってればコマンド名とかオプションとか真似してるってわかるだろ?
WSL(Linux)にパスを変換するときのオプションが何故か-uな所とか
(cygwinでは-uの長いオプション名は--unix)
943デフォルトの名無しさん
2020/11/17(火) 21:04:26.43ID:8pwQehN5 まあもしかしたらcygwinよりも前にSFU(の前身)とかがやってたのかもしれんけどさ
944デフォルトの名無しさん
2020/11/17(火) 21:32:09.28ID:yKNV/xx9 >>940
「仕組み」は、具体的な実装のことではなく、全体的なやりかたのことやろ。
「仕組み」は、具体的な実装のことではなく、全体的なやりかたのことやろ。
945デフォルトの名無しさん
2020/11/17(火) 22:11:55.77ID:8pwQehN5 > 俺「エクスプローラーから見たら文字化けしとるやんけwww 既視感ぱねぇwww」
> 数分後 → 「同じじゃねーかwww」
この同じじゃねーかwwwっていうのは : などのWindowsでは使えない文字のマッピング先の文字コードの話ね
そういや文字コードが同じであることは確かめたけど、実際にcygwinで作ったファイルをWSLで見たことなかったわ
んで、今やってみたけど、当然なんだけど、cygwinで作った : というファイルはWSLでちゃんと : になってたw
cygwin(たぶんmsysも同じ)との相互運用も考えてこうしたんだろうな
> 数分後 → 「同じじゃねーかwww」
この同じじゃねーかwwwっていうのは : などのWindowsでは使えない文字のマッピング先の文字コードの話ね
そういや文字コードが同じであることは確かめたけど、実際にcygwinで作ったファイルをWSLで見たことなかったわ
んで、今やってみたけど、当然なんだけど、cygwinで作った : というファイルはWSLでちゃんと : になってたw
cygwin(たぶんmsysも同じ)との相互運用も考えてこうしたんだろうな
946デフォルトの名無しさん
2020/11/18(水) 14:43:02.92ID:oGkGNlvA947946
2020/11/18(水) 14:47:49.14ID:oGkGNlvA948946
2020/11/18(水) 14:58:29.15ID:oGkGNlvA >>941
Ruby で、CSV なら、
require 'csv'
CSV.foreach( "a.csv", col_sep: " " ) do |row| # 1行ずつ処理する
p row[ 1 ]
end
出力
"x"
"x"
"z"
Ruby で、CSV なら、
require 'csv'
CSV.foreach( "a.csv", col_sep: " " ) do |row| # 1行ずつ処理する
p row[ 1 ]
end
出力
"x"
"x"
"z"
949デフォルトの名無しさん
2020/11/18(水) 15:28:33.58ID:XsHXPiSN951デフォルトの名無しさん
2020/11/18(水) 15:59:00.88ID:XsHXPiSN >>950
出力される行数10行くらいに増やした場合は?(もちろん全て日付変えて)
出力される行数10行くらいに増やした場合は?(もちろん全て日付変えて)
952946
2020/11/18(水) 16:43:39.93ID:oGkGNlvA 正しく出力される。
実際には、c, d, f などは出力されていないけど
a,2020-11-17,aaa
b,2020-11-18,bbb
c
d
e,2020-11-21,eee
f
g,2020-11-23,ggg
h,2020-11-24,hhh
i
j,2020-11-26,jjj
k,2020-11-27,kkk
l,2020-11-28,lll
m
n
o,2020-12-01,ooo
p,2020-12-02,ppp
q,2020-12-03,qqq
r
s,2020-12-05,sss
t,2020-12-06,ttt
u
実際には、c, d, f などは出力されていないけど
a,2020-11-17,aaa
b,2020-11-18,bbb
c
d
e,2020-11-21,eee
f
g,2020-11-23,ggg
h,2020-11-24,hhh
i
j,2020-11-26,jjj
k,2020-11-27,kkk
l,2020-11-28,lll
m
n
o,2020-12-01,ooo
p,2020-12-02,ppp
q,2020-12-03,qqq
r
s,2020-12-05,sss
t,2020-12-06,ttt
u
953デフォルトの名無しさん
2020/11/18(水) 17:46:13.72ID:XsHXPiSN954デフォルトの名無しさん
2020/11/18(水) 22:39:32.53ID:c4VI5UKm フィールド数が想定がところがあるとエラーで getline が呼ばれなくて
var がそのままになったりするのかも?
var がそのままになったりするのかも?
955デフォルトの名無しさん
2020/11/18(水) 22:40:20.82ID:c4VI5UKm 想定が -> 想定外な
956デフォルトの名無しさん
2020/11/18(水) 23:00:38.15ID:XsHXPiSN957デフォルトの名無しさん
2020/11/18(水) 23:22:35.65ID:2l0B+GoX AWKのgetlineってめっちゃ便利よね。
これ使い始めたらもうシェルスクリプトじゃなくてAWKスクリプトになるけどw
これ使い始めたらもうシェルスクリプトじゃなくてAWKスクリプトになるけどw
958デフォルトの名無しさん
2020/11/18(水) 23:25:59.76ID:XsHXPiSN959デフォルトの名無しさん
2020/11/19(木) 02:55:11.75ID:kL0AGIHT まず再現するデータをよこせ
960デフォルトの名無しさん
2020/11/19(木) 07:48:43.53ID:jemYGepS 元ネタの人じゃないけど以下のデータでおかしくなった。
a.txt
a x Nov 17 2020 aaa
b x Nov 18 2020 bbb
c x Nov 18 2020 ccc
d x Nov 19 2020 ddd
d x
e x Nov 19 2020 eee
f x Nov 20 2020 fff
d の行以降の日付が今日の日付になった。Ubuntu 16.04.7。
なんかデータをちょっといじると再現しなくなるような感もある。
a.txt
a x Nov 17 2020 aaa
b x Nov 18 2020 bbb
c x Nov 18 2020 ccc
d x Nov 19 2020 ddd
d x
e x Nov 19 2020 eee
f x Nov 20 2020 fff
d の行以降の日付が今日の日付になった。Ubuntu 16.04.7。
なんかデータをちょっといじると再現しなくなるような感もある。
961946
2020/11/19(木) 10:41:14.25ID:uVXRNBYq >>960
d x
という変な行も、データに入れるのか?
Windows 10, WSL2, Ubuntu 18.04 では、下のように出力された
a,2020-11-17,aaa
b,2020-11-18,bbb
c,2020-11-18,ccc
d,2020-11-19,ddd
d,2020-11-19,
e,2020-11-19,eee
f,2020-11-20,fff
d x
という変な行も、データに入れるのか?
Windows 10, WSL2, Ubuntu 18.04 では、下のように出力された
a,2020-11-17,aaa
b,2020-11-18,bbb
c,2020-11-18,ccc
d,2020-11-19,ddd
d,2020-11-19,
e,2020-11-19,eee
f,2020-11-20,fff
962デフォルトの名無しさん
2020/11/19(木) 21:37:07.41ID:ACSoydf1 >>961
そう。わざと壊れたデータで遊んでみているw
確実に再現できるバグは、ある意味治すのは易しい。
再現方法がよくわからんバグは...どうしたら再現するかを考えるのも一興かとw
あしまった、データが違ったかも。こうかな。
a x Nov 17 2020 aaa
b x Nov 18 2020 bbb
c x Nov 18 2020 ccc
d x Nov 20 2020 ddd
d x
e x Nov 20 2020 eee
f x Nov 20 2020 fff
そう。わざと壊れたデータで遊んでみているw
確実に再現できるバグは、ある意味治すのは易しい。
再現方法がよくわからんバグは...どうしたら再現するかを考えるのも一興かとw
あしまった、データが違ったかも。こうかな。
a x Nov 17 2020 aaa
b x Nov 18 2020 bbb
c x Nov 18 2020 ccc
d x Nov 20 2020 ddd
d x
e x Nov 20 2020 eee
f x Nov 20 2020 fff
963デフォルトの名無しさん
2020/11/19(木) 21:49:05.89ID:pLwLwTYy ちなみにdateコマンドは日付が空だと今日の日付を入れるようなので
Nov 20になる前に試すのがおすすめw
Nov 20になる前に試すのがおすすめw
964946
2020/11/20(金) 02:15:19.68ID:pwTm9Uxw このデータでやった。
b が今日の日付になる
a x Nov 03 2020 aaa
b x
c x Nov 05 2020 ccc
d x Nov 06 2020 ddd
出力
a,2020-11-03,aaa
b,2020-11-20,
c,2020-11-05,ccc
d,2020-11-06,ddd
b が今日の日付になる
a x Nov 03 2020 aaa
b x
c x Nov 05 2020 ccc
d x Nov 06 2020 ddd
出力
a,2020-11-03,aaa
b,2020-11-20,
c,2020-11-05,ccc
d,2020-11-06,ddd
965デフォルトの名無しさん
2020/11/20(金) 14:19:37.94ID:EGUOn9wt966デフォルトの名無しさん
2020/11/23(月) 08:04:11.39ID:bkMAXdue ループ処理をバックグラウンドで流すと500個ぐらいプロセスができて
まったく動かない。いい方法ないかな。
まったく動かない。いい方法ないかな。
967デフォルトの名無しさん
2020/11/23(月) 08:50:42.89ID:eEk7O1Jq968デフォルトの名無しさん
2020/11/23(月) 10:20:31.35ID:QFnswc7I >>966
シェルの問題なんだろうか…?
シェルの問題なんだろうか…?
969デフォルトの名無しさん
2020/11/23(月) 11:57:26.98ID:fPgs5Hol 10万行のループ処理にかかる時間は、while は5秒、for は9分。
それらを、awk, perl に書き直せば、0.1秒
forの時間のほとんどは、プロセスの起動・終了処理。
そもそも、bash はループ処理に向いていないので、dash を使う。
それでも、シェルスクリプトはループ処理に向いていない
awk, perl, Ruby などは、1プロセス内で処理するから、
シェルスクリプトよりも断然速い
それらを、awk, perl に書き直せば、0.1秒
forの時間のほとんどは、プロセスの起動・終了処理。
そもそも、bash はループ処理に向いていないので、dash を使う。
それでも、シェルスクリプトはループ処理に向いていない
awk, perl, Ruby などは、1プロセス内で処理するから、
シェルスクリプトよりも断然速い
970デフォルトの名無しさん
2020/11/23(月) 12:55:10.05ID:eEk7O1Jq 古いCorei7だけどbashで0.5秒で終わるぞ?
$ time -p bash -c 'i=0; while [ $i -lt 100000 ]; do i=$((i+1)); done'
real 0.53
user 0.51
sys 0.00
dashなら0.15秒だな
$ time -p dash -c 'i=0; while [ $i -lt 100000 ]; do i=$((i+1)); done'
real 0.15
user 0.14
sys 0.01
$ time -p bash -c 'i=0; while [ $i -lt 100000 ]; do i=$((i+1)); done'
real 0.53
user 0.51
sys 0.00
dashなら0.15秒だな
$ time -p dash -c 'i=0; while [ $i -lt 100000 ]; do i=$((i+1)); done'
real 0.15
user 0.14
sys 0.01
971デフォルトの名無しさん
2020/11/23(月) 12:58:14.53ID:eEk7O1Jq > forの時間のほとんどは、プロセスの起動・終了処理。
forでプロセス起動なんてしないけど?
forでプロセス起動なんてしないけど?
レス数が950を超えています。1000を超えると書き込みができなくなります。
ニュース
- 高市首相を「こんなバカ」呼ばわりで物議…人気ミュージシャンが声明「感情的で稚拙だった。適切な言い方でなかった」 [muffin★]
- 中国通ジャーナリスト「高市首相が反省、撤回必要ない…こういう外交待っていた」「日本のレッドラインを明確に示した」 ★2 [お断り★]
- 芸能界ケンカ最強番付を発表「リングなら岡田准一」 横浜流星&新田真剣佑の名前も 1番強いのは誰か [牛丼★]
- 【物価高対策】「おこめ券を配布しません」大阪府交野の市長が明言「経費率が高い」「今高い米をムリして…」 [1ゲットロボ★]
- たぬかなの“結婚隠し”に「弱者男性ビジネス」の声…本人が異例の対応「支払いの履歴持ってきてくれたら返金するから連絡してや」 [muffin★]
- 「報道特集」山本恵里伽アナ、日中緊張で「当たり前のことがはっきり言いづらい空気…ショック」 [首都圏の虎★]
- 【DAZN】フォーミュラGP【F1 2 3 SF P】Lap1812
- 【フジテレビ】2025 FORMULA 1【NEXT】Lap606
- とらせん IP
- こいせん 全レス転載禁止
- 巨専】 ★3
- 【DAZN/ABEMA】ブンデスリーガ・DFBポカール★6
- 【安倍の実】日本円の価値、ぐんぐん低下し50年前と同水準に。。実質為替レートだと現在は1ドル270円。高市で更なら転落も [219241683]
- 【実況】博衣こよりのえちえちラムベガス🧪★7
- 老害「いいからこの漫画読め!面白いから!」→本当に面白かった漫画 [339035499]
- ワクチン打っちゃった正直な理由WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
- 歩きタバコして排水溝に吸い殻捨ててくスーツ姿のリーマンを
- 🌳🪨🏡🪨🪨🌳🪨🏡🏜
