シェルスクリプトに関する総合スレッドです。
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。
シェルスクリプト総合 その33
https://mevius.5ch.net/test/read.cgi/tech/1584893550/
探検
シェルスクリプト総合 その34
レス数が900を超えています。1000を超えると表示できなくなるよ。
2020/08/21(金) 15:17:55.64ID:mArnj/tT
822デフォルトの名無しさん
2020/11/10(火) 12:11:36.00ID:08CevRpc 正直言うと z 使うと保守が面倒臭くなる
手離れ悪い
手離れ悪い
823デフォルトの名無しさん
2020/11/10(火) 13:09:49.18ID:2U042Zc8824デフォルトの名無しさん
2020/11/10(火) 13:24:27.74ID:wuzfZjuS 来年サマータイム導入します(キリっ
825デフォルトの名無しさん
2020/11/10(火) 13:51:26.00ID:9k3Gk+Qe826デフォルトの名無しさん
2020/11/10(火) 14:08:32.86ID:2U042Zc8 >>825
なるほど... ありがとうございました!
なるほど... ありがとうございました!
827デフォルトの名無しさん
2020/11/11(水) 06:40:35.05ID:AeLDZcCA828デフォルトの名無しさん
2020/11/11(水) 08:59:35.27ID:KkaNKXcC >>827
膠っていう考え方ね。
膠っていう考え方ね。
829デフォルトの名無しさん
2020/11/11(水) 16:14:40.51ID:o7ye760s 合成の誤膠って奴かな?
830デフォルトの名無しさん
2020/11/11(水) 17:25:57.68ID:2Y4tzM/7 シェルスクリプトで済むんなら使った方が良い。
831デフォルトの名無しさん
2020/11/11(水) 17:29:00.12ID:uSbtgdeR 結局シェルスクリプトが一番適切だって思うから、みんなシェルスクリプトを使うわけで
そのあとシェルスクリプト使って後悔するなら、シェルスクリプト力(技術力)をつけたほうが良いってことだよ
他の言語に乗り換えるってのは、適切じゃない言語を使うってこと。単に慣れてるだけ。
そのあとシェルスクリプト使って後悔するなら、シェルスクリプト力(技術力)をつけたほうが良いってことだよ
他の言語に乗り換えるってのは、適切じゃない言語を使うってこと。単に慣れてるだけ。
832デフォルトの名無しさん
2020/11/11(水) 17:41:19.52ID:EWytaMfd >>831
アホがおるw
アホがおるw
833デフォルトの名無しさん
2020/11/11(水) 18:13:47.22ID:KDi/CYCF834デフォルトの名無しさん
2020/11/11(水) 18:15:50.79ID:uSbtgdeR ほら、反論なしと(笑)
835デフォルトの名無しさん
2020/11/11(水) 19:29:10.44ID:KFC8J5w+ 真面目に反論する気にもならないアホな論てあるんやで
自覚ないとおわかりになられんでしょうけど
自覚ないとおわかりになられんでしょうけど
836デフォルトの名無しさん
2020/11/11(水) 20:20:09.72ID:1NS/Ttdd シェルスクリプトの欠点の一つとして
シェル変数を気軽に上書きできるという点がある
うっかりシステムに関係する変数を書き換えると
大騒ぎになるかも
シェル変数を気軽に上書きできるという点がある
うっかりシステムに関係する変数を書き換えると
大騒ぎになるかも
837デフォルトの名無しさん
2020/11/11(水) 20:37:56.82ID:auS5YaT3 システムに関係するシェル変数ってなに?
他の言語じゃその変数を書き換えることは無理なの?
他の言語じゃその変数を書き換えることは無理なの?
838デフォルトの名無しさん
2020/11/11(水) 20:46:46.52ID:KFC8J5w+ うっかり=意図せずにだろ
他の言語では環境変数を書き換えるという明確な意思がなければ変わらないだろう
他の言語では環境変数を書き換えるという明確な意思がなければ変わらないだろう
839デフォルトの名無しさん
2020/11/11(水) 21:13:01.49ID:auS5YaT3 え?システムに関係するシェル変数って環境変数のことだったの?
環境変数を書き換えても、他のプロセスには影響ないんだけど?
それでシステムに影響がある環境変数の名前はなに?
環境変数を書き換えても、他のプロセスには影響ないんだけど?
それでシステムに影響がある環境変数の名前はなに?
840デフォルトの名無しさん
2020/11/11(水) 21:13:24.60ID:VcjQlt7C >>836
readonlyというのがあるじゃん
readonlyというのがあるじゃん
841デフォルトの名無しさん
2020/11/11(水) 21:14:32.87ID:KFC8J5w+ 自分が読めないだけだろ
そしてそのしつこさは...w
そしてそのしつこさは...w
842デフォルトの名無しさん
2020/11/11(水) 21:17:25.54ID:KFC8J5w+ >>840
localというのもあるなw
localというのもあるなw
843デフォルトの名無しさん
2020/11/11(水) 21:20:32.92ID:auS5YaT3 シェル変数といったり環境変数といったり
めちゃくちゃだよなw
めちゃくちゃだよなw
844デフォルトの名無しさん
2020/11/11(水) 22:41:53.94ID:s9R9EURF path=...
があるだけで、以降の処理はだいたい残念なことになってまう、みたいなシェルはあったような。
でも、しゃあない。
そういう事故は飲むしかない。
イヤでもあきらめろ。
があるだけで、以降の処理はだいたい残念なことになってまう、みたいなシェルはあったような。
でも、しゃあない。
そういう事故は飲むしかない。
イヤでもあきらめろ。
845デフォルトの名無しさん
2020/11/12(木) 00:04:37.86ID:BEseEgkn シェルスクリプトが環境変数の書き換えに弱いというのはまだ分かるんだが,
それを「シェルスクリプト特有の」欠点みたいに呼ぶのはよく分からん。
・環境変数を「意図せず」書き換えてしまうこと
・環境変数を「悪意を持って」書き換えられること
こういう事態に弱いのは別にシェルスクリプトに限ったことじゃないでしょう。
具体例を出さなきゃ納得できない人もいそうなんで一つだけ挙げますね。
$LD_LIBRARY_PATH。
それを「シェルスクリプト特有の」欠点みたいに呼ぶのはよく分からん。
・環境変数を「意図せず」書き換えてしまうこと
・環境変数を「悪意を持って」書き換えられること
こういう事態に弱いのは別にシェルスクリプトに限ったことじゃないでしょう。
具体例を出さなきゃ納得できない人もいそうなんで一つだけ挙げますね。
$LD_LIBRARY_PATH。
846デフォルトの名無しさん
2020/11/12(木) 01:27:16.52ID:V4Sk/AjY 環境変数を意図せず書き換えてしまうとは、環境変数を触るつもりが全くないのにってことでしょ
シェルスクリプトに限らずって、他にそういうのなんかあったっけ
シェルスクリプトに限らずって、他にそういうのなんかあったっけ
847デフォルトの名無しさん
2020/11/12(木) 04:20:19.45ID:kQyOkhX7 環境変数ってUnixやLinuxに限らず
Windowsにだってめちゃくちゃ使われてるぞ
Windowsにだってめちゃくちゃ使われてるぞ
848デフォルトの名無しさん
2020/11/12(木) 04:34:19.99ID:1ZLHCloS 環境変数PATH、有名なので間違えて書き換えたりしない
LD_LIBRARY_PATH、名前がかぶることはまずない
なぁ、実害あるん?
LD_LIBRARY_PATH、名前がかぶることはまずない
なぁ、実害あるん?
849デフォルトの名無しさん
2020/11/12(木) 05:19:49.92ID:DEOHcohA シェルスクリプトは変数と環境変数のアクセスする違いがないってことだろうに
あくまでもローカル変数と使うつもりだったのにうっかりという
システムでの環境変数って言ってもそんな有名どころのではなくてもオレオレでというのはあるだろうに
視野が広いのか狭いのかなんなのか、ズレテルな
あくまでもローカル変数と使うつもりだったのにうっかりという
システムでの環境変数って言ってもそんな有名どころのではなくてもオレオレでというのはあるだろうに
視野が広いのか狭いのかなんなのか、ズレテルな
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/uhC8レス数が900を超えています。1000を超えると表示できなくなるよ。
ニュース
- 【イオン】中国湖南省に新大型店を開業 混乱なく地元客でにぎわい モール内にユニクロや無印良品 [1ゲットロボ★]
- 【中国】日本のアニソン歌唱中に強制中断 上海、照明落とされ音楽止まる [♪♪♪★]
- 【芸能】『バンダイナムコフェス』上海公演 日本人歌手・大槻マキが歌唱中に強制退場… 急に音を止められスタッフらしき人達に★2 [冬月記者★]
- 【ヒグマ】焼却施設が限界 駆除数17倍で処理に追われる自治体 1頭焼却に灯油100リットル 作業追いつかずに腐敗進み、埋めるケースも [ぐれ★]
- 【野球】巨人、オコエ瑠偉〝電撃退団〟は温情措置 10年前からMLB志向も…羽ばたけるか [冬月記者★]
- 中国航空会社、日本行き減便900便超に拡大 関空中心に全体の16% ★2 [蚤の市★]
- 昨日高市に8000万の宣伝費報道が出てから各社高市に批判的な記事を一斉に出し始める。一体何が起こってるんや…🤔 [931948549]
- もーいーくつねーるとおー🏡たーつ
- 【速報】例のVtuber、謝罪
- 【悲報】「マリオブラザーズ3」当時詰んだ人が多数… [127859383]
- 【朗報】維新、『もう与党になれたので』企業団体献金規制法案を取り下げwwwwwwwww
- 新海誠っていつの間にかオワコンになったな
