シェルスクリプトに関する総合スレッドです。
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。
シェルスクリプト総合 その33
https://mevius.5ch.net/test/read.cgi/tech/1584893550/
探検
シェルスクリプト総合 その34
レス数が900を超えています。1000を超えると表示できなくなるよ。
2020/08/21(金) 15:17:55.64ID:mArnj/tT
850デフォルトの名無しさん
2020/11/12(木) 08:59:00.57ID:NniWGdD3 プログラムのテストでシェルスクリプト使うだろ。
使わないのはテストしないからか
使わないのはテストしないからか
851デフォルトの名無しさん
2020/11/12(木) 10:16:41.65ID:1ZLHCloS852デフォルトの名無しさん
2020/11/12(木) 12:18:32.48ID:1kfP87l6853デフォルトの名無しさん
2020/11/12(木) 12:21:54.36ID:1kfP87l6854デフォルトの名無しさん
2020/11/12(木) 13:43:18.74ID:OA6SFmf/ 環境変数を「意図せず」書き換えてしまうことはあるが
その結果、問題が発生することはないって話だよ
だって環境変数を書き換えたとしても、最悪でも
自分とその子孫のプロセスにか影響がないから
システムを壊したりすることがない
その結果、問題が発生することはないって話だよ
だって環境変数を書き換えたとしても、最悪でも
自分とその子孫のプロセスにか影響がないから
システムを壊したりすることがない
855デフォルトの名無しさん
2020/11/12(木) 13:48:31.03ID:1kfP87l6856デフォルトの名無しさん
2020/11/12(木) 14:09:44.21ID:OA6SFmf/ >>836でかいてあるだろ
> うっかりシステムに関係する変数を書き換えると
> 大騒ぎになるかも
システムに関する変数を書き換えても、自分のプロセスとそれ以下にしか
影響がないから大騒ぎになんかならん
それにシステムに関する変数といっても数えられる程度しかない
> うっかりシステムに関係する変数を書き換えると
> 大騒ぎになるかも
システムに関する変数を書き換えても、自分のプロセスとそれ以下にしか
影響がないから大騒ぎになんかならん
それにシステムに関する変数といっても数えられる程度しかない
857デフォルトの名無しさん
2020/11/12(木) 14:57:57.53ID:kygpD0ad プログラムってシェルから起動するんじゃないの?
858デフォルトの名無しさん
2020/11/12(木) 15:13:27.21ID:f5BAQJxF fork元がshellならそうだね
859デフォルトの名無しさん
2020/11/12(木) 15:30:36.85ID:1kfP87l6 >>856
大物の起動スクリプトとかでやらかすと、騒ぎにはなりうる。
init系とか.*rcとかcronとかでも。
初見ではわけがわからんかったりするしな。
まあ、個人的には、そういうものだと思ってるが。
おかげでラクなところもあるし、しゃあない。
大物の起動スクリプトとかでやらかすと、騒ぎにはなりうる。
init系とか.*rcとかcronとかでも。
初見ではわけがわからんかったりするしな。
まあ、個人的には、そういうものだと思ってるが。
おかげでラクなところもあるし、しゃあない。
860デフォルトの名無しさん
2020/11/12(木) 16:55:55.29ID:s02jb8N+ WindowsだとADと連携させたりして、レジストリのアクセス制御が容易とか、そういう話?
861デフォルトの名無しさん
2020/11/12(木) 17:49:14.13ID:OA6SFmf/ >>859
> 大物の起動スクリプトとかでやらかすと、
だから何をやらかすんだよw
環境変数PATHを書き換えてしまったんだ
って「だけ」の話をしてるんか?
何をやらかしたのかを言わずに、
ずっとやらかししまうって言ってるだけじゃんか
> 大物の起動スクリプトとかでやらかすと、
だから何をやらかすんだよw
環境変数PATHを書き換えてしまったんだ
って「だけ」の話をしてるんか?
何をやらかしたのかを言わずに、
ずっとやらかししまうって言ってるだけじゃんか
862デフォルトの名無しさん
2020/11/13(金) 02:11:25.86ID:Rmv9apnz ↑ こいつの知見の無さが半端ない。なのになぜか偉そう。頭悪そう
863デフォルトの名無しさん
2020/11/13(金) 02:52:22.83ID:F3tZoo3K わからないから質問してるのに
それにたいしてわからんのかと言われても
最初から、わからんと言ってるんだがとしか言えない
それで、何をやらかすんだ?
それにたいしてわからんのかと言われても
最初から、わからんと言ってるんだがとしか言えない
それで、何をやらかすんだ?
864デフォルトの名無しさん
2020/11/13(金) 11:56:10.07ID:4qY0TlDt 具体的なケースはわりとどうでもいいから。
パスでもプロキシでも、環境変数はちょくちょく影響がある。
それが想像つかんのなら、もうからまんでええんちゃう?
パスでもプロキシでも、環境変数はちょくちょく影響がある。
それが想像つかんのなら、もうからまんでええんちゃう?
865デフォルトの名無しさん
2020/11/13(金) 12:58:09.35ID:es502k4w 複数のシェルスクリプトをカスケードで読む場合
変数の管理がめんどくさくなるかな
sourceしたりして他のシェルスクリプトと非同期で
動かすとさらに複雑になる
変数の管理がめんどくさくなるかな
sourceしたりして他のシェルスクリプトと非同期で
動かすとさらに複雑になる
866デフォルトの名無しさん
2020/11/13(金) 13:19:38.00ID:A88QmKc9 >>864
逃げるなよw
具体的なケースが重要
PATH変数とHTTP_PROXY変数だっていいたのだろうが "それだけ" だろう?
しかもシステム設定を変えるわけじゃない。
何度も言うが自分と子プロセスにしか影響がない。
意図せず変更してしまう可能性がどれだけあるのかと
あと環境変数じゃないなら小文字使えや
逃げるなよw
具体的なケースが重要
PATH変数とHTTP_PROXY変数だっていいたのだろうが "それだけ" だろう?
しかもシステム設定を変えるわけじゃない。
何度も言うが自分と子プロセスにしか影響がない。
意図せず変更してしまう可能性がどれだけあるのかと
あと環境変数じゃないなら小文字使えや
867デフォルトの名無しさん
2020/11/13(金) 13:23:59.15ID:A88QmKc9 >>865
また知ってる単語を使ってみましたみたいな文章だなw
カスケードで読むってなんだよ。誰がそんな用語使ってるんだ?
シェルスクリプトが別なら変数は共有されない
非同期で動かすというなら、それぞれ別のサブシェルになるから
これも変数は共有されない
sourceしたりというなら、グローバル変数のことだろうが
それなら、シェルスクリプトはグローバル変数しかないから
大規模に向かないって言えばいいだけのことだろ?
グローバル変数しかなくてもプリフィックス(を名前空間として考える)を
変数名につければいいだけだがな。それはPOSIXにこだわらないなら
localとかtypesetでローカル変数作れるし
また知ってる単語を使ってみましたみたいな文章だなw
カスケードで読むってなんだよ。誰がそんな用語使ってるんだ?
シェルスクリプトが別なら変数は共有されない
非同期で動かすというなら、それぞれ別のサブシェルになるから
これも変数は共有されない
sourceしたりというなら、グローバル変数のことだろうが
それなら、シェルスクリプトはグローバル変数しかないから
大規模に向かないって言えばいいだけのことだろ?
グローバル変数しかなくてもプリフィックス(を名前空間として考える)を
変数名につければいいだけだがな。それはPOSIXにこだわらないなら
localとかtypesetでローカル変数作れるし
868デフォルトの名無しさん
2020/11/13(金) 14:48:01.16ID:4qY0TlDt869デフォルトの名無しさん
2020/11/13(金) 15:20:10.18ID:S1mNTw0c 結局,「自分が思う(無根拠な)あやうさ」
を放言した結果,鉞が四方八方から飛んできて収集付かなくなった感じかね。
元の発言
> シェルスクリプトの欠点の一つとして
> シェル変数を気軽に上書きできるという点がある
> うっかりシステムに関係する変数を書き換えると
> 大騒ぎになるかも
からしてまあシェルスクリプト分かってんのかってツッコみたくなる点が幾つもあるし。
もう散々上で叩いたからこれ以上は責めるのを止すが。
を放言した結果,鉞が四方八方から飛んできて収集付かなくなった感じかね。
元の発言
> シェルスクリプトの欠点の一つとして
> シェル変数を気軽に上書きできるという点がある
> うっかりシステムに関係する変数を書き換えると
> 大騒ぎになるかも
からしてまあシェルスクリプト分かってんのかってツッコみたくなる点が幾つもあるし。
もう散々上で叩いたからこれ以上は責めるのを止すが。
870デフォルトの名無しさん
2020/11/13(金) 18:14:52.09ID:4qY0TlDt それは双方同等。
「自分が思う(無根拠な)大丈夫さ」だから。
ま、一回事故らんと身に染みないことではある。
「自分が思う(無根拠な)大丈夫さ」だから。
ま、一回事故らんと身に染みないことではある。
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:XsHXPiSNレス数が900を超えています。1000を超えると表示できなくなるよ。
ニュース
- 中国通ジャーナリスト「高市首相が反省、撤回必要ない…こういう外交待っていた」「日本のレッドラインを明確に示した」 [お断り★]
- 高市首相を「こんなバカ」呼ばわりで物議…人気ミュージシャンが声明「感情的で稚拙だった。適切な言い方でなかった」 [muffin★]
- 芸能界ケンカ最強番付を発表「リングなら岡田准一」 横浜流星&新田真剣佑の名前も 1番強いのは誰か [牛丼★]
- 【物価高対策】「おこめ券を配布しません」大阪府交野の市長が明言「経費率が高い」「今高い米をムリして…」 [1ゲットロボ★]
- 「報道特集」山本恵里伽アナ、日中緊張で「当たり前のことがはっきり言いづらい空気…ショック」 [首都圏の虎★]
- 落ち度はゼレンスキー氏に 内政混乱、市民怒り [蚤の市★]
- 【実況】博衣こよりのえちえちラムベガス🧪★5
- 【実況】博衣こよりのえちえちラムベガス🧪★6
- 【実況】博衣こよりのえちえちラムベガス🧪★4
- 🏡
- オメガ👈なにを思い浮かべた? [546716239]
- 高市早苗に3,000万円の献金を渡した団体、限界突破wwwwwwwwwwwwwwwwwwwwwwww [329329848]
