20/05/19 22:12:04.54 3kLN/2rB.net
>>322
>>318の最後の行でそれを補足してるんだがな
>>302の user's preferred command language interpreter
で間違いないだろう、それ以上でもそれ以下でもない。ログインシェル自体が(ユーザデフォルトの) user's preferred command language interpreter だから&それしか多分設定するとこがないから、ログインシェルが設定されてるだけかな
手動で、今の俺の気分はログインシェルとは違うこのシェルなんだと、
SHELL=なんか
sudo -s
user's preferred command language interpreter が実感できなくね?
で、bashではそう書いてあるらしいが、(ほぼなんもしてない)dashってどうなってるんだろうと、ソースをチラ見した限りはそんな風なとこちょっと見えないな。OSがなのかな?
ああ、もちろん>>323なんてのは嘘(逆にどんな環境やねん)、dashでもSHELLに設定されてるし、そこからbashを起動してもSHELLはbashのパスには変わらない
335:デフォルトの名無しさん
20/05/19 22:15:18.55 41YM3k+D.net
>>324
何をごちゃごちゃ言ってるのか知らんけど、
> 俺の環境ではログインシェルを zsh にしてログイン後に bash 起動したけど
> SHELL 変数は /bin/bash でしたよ?
↑これはman bashからみて絶対にありえないし
SHELL環境変数はログイン時のシェルなんだよ
まさか(自分で変更したら)ログイン時のシェルじゃない!
とか言いたいんか?
336:デフォルトの名無しさん
20/05/19 22:18:59.32 41YM3k+D.net
> dashでもSHELLに設定されてるし、
それはどこに書いてあんの?
ソースコード見たなら書いてある場所ぐらい言えるよね
337:デフォルトの名無しさん
20/05/19 22:20:16.13 41YM3k+D.net
訂正
× まさか(自分で変更したら)ログイン時のシェルじゃない!
○ まさか(ログイン後に自分でSHELL変数の内容を変更したら)ログイン時のシェルじゃない!
338:デフォルトの名無しさん
20/05/19 22:21:16.50 3kLN/2rB.net
>>325
何をムキになってるんだかwお前の読めない読まない病かよ?
ser's preferred command language interpreter
で間違いないだろう、それ以上でもそれ以下でもない。変数の意味だろ、そもそもは
意味としては、ログインシェルじゃないのも設定できる、ser's preferred command language interpreter だって話だよ
誰も、bashで変わるなんて言ってないのに、何を言い出してるんだか
339:デフォルトの名無しさん
20/05/19 22:22:53.62 3kLN/2rB.net
>>326
OpenBSD、FreeBSD、Ubuntu
で、そうなるって話
dashのソース中にはチラ見ではちょっとそういうのを設定しているとこは見えないけどって話。どこでやってんのかなあって話
340:デフォルトの名無しさん
20/05/19 22:24:45.56 3kLN/2rB.net
まさか、こんな展開になるとは思わんかったな。なんでムキになってるんだか
341:デフォルトの名無しさん
20/05/19 22:33:25 Yw4hD4hb.net
>>315
議論中すいません。ageます
342:デフォルトの名無しさん
20/05/19 22:36:50 +8IfJNam.net
man と実装が違っているのは確認してるよ
でも事
343:実複数バージョン(bash 4.2系/4.4系)でこの動きをするんで 「zsh をログインシェルでbash起動したら SHELL が bash に なった」発言を撤回するのは難しいね 特に >>302 の内容が決定的に撤回困難にしている これは君が示した文書で、君を苦しめているのは君自身 ちがうか? 君の手元の環境で発生しているだろう? 小説に出てくるクソ弁護士のような論調はやめたまえ
344:デフォルトの名無しさん
20/05/19 22:45:31 3kLN/2rB.net
>>332
どんな環境やねん
こっちで確認できる複数の環境でそんなのならんから、嘘としか思えんぞ
自分で環境がとかいいだしてるんだから、言えよw
仮にbash4だけの話なら、bash3、bash5ではそうならんから、bash4のバグじゃないの?bash4ってなんでやねん
345:デフォルトの名無しさん
20/05/19 22:46:32 3kLN/2rB.net
>>331
URLリンク(pubs.opengroup.org)
「ここに載っている」のはそういうことらしい。その中でも規定されてるのはって話かな、上記のは
それ以外は特に制御文字としては扱わない。\x00--\x7F内でも言及してないのは
\x80--\xFEなんてロケール/キャラクターセット依存だからそれぞれのキャラクターセット/文字コードでの話だろう。もちろんその中に制御文字なんてないんじゃないかな
346:デフォルトの名無しさん
20/05/19 22:53:45 3kLN/2rB.net
>>332,333
あ、Ubuntu 18.04 TLS のはまだ bash 4.4.20 だった
そんな動きにはならんな。嘘だなww
347:デフォルトの名無しさん
20/05/19 22:54:59 fsFcCZSO.net
>>332 bash_profile あたりに SHELL=/bin/bash とか書いてるんじゃないの?
348:デフォルトの名無しさん
20/05/19 23:04:14.14 3kLN/2rB.net
なるほど....!w
349:デフォルトの名無しさん
20/05/19 23:04:16.77 41YM3k+D.net
>>332
お前が言ってることの根拠は
「"preferred"はログインシェルのことじゃない!」
なんだろうけど、じゃあpreferredはどういう意味なんだよ?
350:デフォルトの名無しさん
20/05/19 23:05:04.34 41YM3k+D.net
>>336
自分で書いといてアホなこと言ってんのかこいつはwww
あーほあーほ
351:デフォルトの名無しさん
20/05/19 23:07:18.47 41YM3k+D.net
>>332
> 特に >>302 の内容が決定的に撤回困難にしている
> これは君が示した文書で、君を苦しめているのは君自身
> ちがうか?
意味不。 >>302の内容は
SHELL
This variable shall represent a pathname of the user's preferred command language interpreter.
この変数は、ユーザーの優先コマンド言語インタープリターのパス名を表します。
と書いてある通り、ユーザーの優先、つまりログインシェルのこと
それ以外のどういう意味があるんだよ?zshでログインしてbash起動したら
bashがユーザーの優先になるんだ!ってお前は言いたいんか?
352:デフォルトの名無しさん
20/05/19 23:09:21.26 41YM3k+D.net
> dashのソース中にはチラ見ではちょっとそういうのを設定しているとこは見えないけどって話。どこでやってんのかなあって話
SHELL環境変数は基本的に外部から渡される環境変数なんだから、そんなものなくても当たり前
bashは空だった場合に自分で設定しているようだが、それは空だった場合の話で
入っていればなにもしないということ
353:デフォルトの名無しさん
20/05/19 23:14:34.20 3kLN/2rB.net
>>341
負けず嫌いというか、誤りを認めたくないのは、アイツと同じだなw
お前がbashがといいだしたんだろうがっ。まあ、だいたい合意形成できてるからもういいや
354:デフォルトの名無しさん
20/05/19 23:16:01.88 41YM3k+D.net
手元の動作と周りの情報が全部違っていたら、自分の手元が間違ってるって考えないもんかねw
なんで俺の手元で再現させる?再現してないからそれは違うって言ってるに決まってるだろ
常識として「自分の手元だけで発生してる」は信用ならんから
ソースとして外部の情報を参照しろって言ってるのに、こいつは手元しか見ていない
355:デフォルトの名無しさん
20/05/19 23:21:55.33 3kLN/2rB.net
>>340
優先の より 好みの の方がしっくりこなくね?w
ログインシェルはもろ好みだから個々そういう設定にできるんだし
>>343
なんかイライラしてんのか?ちょっとイミフだな。まあいいたいことはなんとなくわかるけどw
356:デフォルトの名無しさん
20/05/19 23:22:13.23 41YM3k+D.net
はい。誰でも簡単に再現できます(笑)
bashを起動したところでSHELLは再設定などされません
(dashはSHELLが空の場合は
357:自分で設定などしないんだな) $ docker run -it debian dash # echo $SHELL # export SHELL=abc # echo $SHELL abc # bash root@58fdfabe096c:/# $SHELL abc
358:デフォルトの名無しさん
20/05/19 23:22:42.25 41YM3k+D.net
>>344
> 優先の より 好みの の方がしっくりこなくね?w
google先生に楯突くな!
359:デフォルトの名無しさん
20/05/19 23:24:47.87 3kLN/2rB.net
>>346
ww
360:デフォルトの名無しさん
20/05/19 23:25:40.73 41YM3k+D.net
debian 7がbash 4.2.37だな
docker run -it debian:7 dash でやればいい。結果は同じだが
361:デフォルトの名無しさん
20/05/19 23:29:44.81 41YM3k+D.net
いい加減理解したかね?俺なんか数年前に
「あぁ!?SHELLは現在のシェルじゃねーのかよ!
現在のシェルのパスはどうやって調べればいいんだよ!」
で苦労してんだから間違いなわけねーっつーの
362:デフォルトの名無しさん
20/05/20 00:20:43 91fxSgSA.net
Windows10, WSL, Ubuntu 18.04 で、やったら、
echo $SHELL
/bin/bash
>>336
/etc/@passwd に、デフォルトシェルが設定してある
ユーザー名:x:1000:1000:,,,:/home/ユーザー名:/bin/bash
363:デフォルトの名無しさん
20/05/20 00:24:36 9QbBPRXg.net
こいつは一体誰と戦ってるんだ・・・
364:デフォルトの名無しさん
20/05/20 00:44:53.45 InboTxWs.net
>>350
話の流れが読めてない
そこからzshとか他のシェルに変えても$SHELLは/bin/bashのままだって話をしてる
365:デフォルトの名無しさん
20/05/20 01:16:06.12 2U5TD7Rg.net
WSLは変態だから、bash.exe で(WSLを)起動すると、chsh/passwd直接などでログインシェルを他のにしても無視されて、bashがログインシェル(?)になる。当然、SHELLは/bin/bash
ログインシェルをzshに変えた、bash.exeで起動した、(bashが起動してるしSHELLはすでに/bin/bashだけど、)、コマンドラインでbashを起動した。SHELLが/bin/bashになってる変わった!
とかか?w
WSLでもubuntu.exeで起動したらまともに起動するっぽいし、他の正規のUnix/Linuxと同じ動作にしかならんな
366:デフォルトの名無しさん
20/05/20 10:06:46 9mY3JetI.net
>>334
thx
367:デフォルトの名無しさん
20/05/20 10:09:40 9mY3JetI.net
結局,現在使ってるシェルを確かめる最も可搬で確実な方法って
ps -o comm= -p $$
↑これかな。
368:デフォルトの名無しさん
20/05/20 10:31:11.68 InboTxWs.net
>>355
最も可搬な方法でも完璧ではないよ
それが使えないpsコマンドもたくさんある
369:デフォルトの名無しさん
20/05/20 13:58:16 9mY3JetI.net
そりゃ完璧ではないだろうけど。
でもまぁ,「最も」可搬な方法ではあるのよね。
370:デフォルトの名無しさん
20/05/20 14:29:26 InboTxWs.net
真面目に出力をパースすれば最も可搬になる
371:デフォルトの名無しさん
20/05/21 18:22:14.34 eGAQdhfO.net
そうかなぁ。
その出力がシステムの間で共通していないから,出力を指定するオプションを付ける必要があるんだけど,
そのオプションにすら可搬性がない,っていう状況だと認識してる。
>>358
ちなみに「真面目なパース」の例を挙げてほしい。
372:デフォルトの名無しさん
20/05/21 18:33:46.87 C3uZcQQo.net
dash,ksh,zshでの、-c でだと、
ps -p $$ は ps 自身になってるんだけど、なんでやねんっと思わなくもない
-c だから別にいいだろうけど
373:デフォルトの名無しさん
20/05/21 18:38:04 C3uZcQQo.net
ああ、(最後の)コマンドをexecしてんのか。納得した
374:デフォルトの名無しさん
20/05/21 19:15:46.38 C3uZcQQo.net
ああ、bashもps(というかコマンド一つだけならか?)だけならps自身だったexecしてた
375:デフォルトの名無しさん
20/05/22 10:18:39 TfVZs9xf.net
???
376:デフォルトの名無しさん
20/05/22 16:42:02.19 ZQuJuyf5.net
えーと、良かったね。「なんでやねんっ」で終わるよりは。
377:デフォルトの名無しさん
20/05/22 17:19:36.41 VBkbngi+.net
マウントとりの変形
378:デフォルトの名無しさん
20/05/22 20:59:32 ZQuJuyf5.net
何のことだ? 自分で調べて納得したなら間違いなく良いことだし、本来そうあるべきだろう。
379:デフォルトの名無しさん
20/05/23 07:51:59 0
380:T8MjFiT.net
381:デフォルトの名無しさん
20/05/23 11:11:44 Ify9JmqW.net
>>359
> ちなみに「真面目なパース」の例を挙げてほしい。
1. ps する
2. 一行目を読み取る
3. PIDが1列目、COMMANDが○列目ってわかる
4. 二行目移行を読み取っていく
5. PIDが一致したら、同じ行の○列目を参照する
6. それが起動してるシェルだ
なお、普通にシェルでプログラミングしろ
シェル芸でこれをやろうとするなよ
この程度の処理プログラミングとして考えれば
ほんの数行で終わる簡単な処理なんだが
シェル芸でやろうとして逆に難しくするやつがいる
シェル使ってるやつは、プログラミングができないやつが多い
382:デフォルトの名無しさん
20/05/23 15:58:02 ch2ICEVw.net
「シェルを使う」という表現に一体どんな意味を込めているのやら...
383:デフォルトの名無しさん
20/05/23 17:56:41.50 hM7sXxSn.net
>>369
この程度のシェルいプログラミングもできないで
シェルが得意と勘違いしてる人がいるなぁって話
384:デフォルトの名無しさん
20/05/23 18:04:41 31g10QWp.net
コードのコの字も出てないのに。少しはコードがあっての話でしか無いな
385:デフォルトの名無しさん
20/05/24 14:47:54 Y1ZXEm/L.net
age
386:デフォルトの名無しさん
20/05/24 15:32:04 0WjVzP+p.net
入れてみてわかるシェルの良さ
387:デフォルトの名無しさん
20/05/24 15:48:48 FTfvJDOJ.net
何入れてるの?
388:デフォルトの名無しさん
20/05/24 16:42:21 LIiHhrYu.net
fishです(AA略)
389:デフォルトの名無しさん
20/05/24 16:46:49 FTfvJDOJ.net
fishはPOSIXシェルじゃないから駄目だね
390:デフォルトの名無しさん
20/05/24 20:51:41.67 vB1Q/4mw.net
>>368
途中に時間が入っていると面倒なんだな
391:デフォルトの名無しさん
20/05/24 22:40:02 oexHBYog.net
Nushellがじわじわと来てるらしいよ
URLリンク(www.nushell.sh)
392:デフォルトの名無しさん
20/05/25 04:14:56 sIgPYriA.net
>>377
時間を気にする必要でもあんの?
393:デフォルトの名無しさん
20/05/25 08:11:38.36 heJMc7oc.net
>>368
「一行目に桁を表わす文字列があって,それがPIDとCOMMANDを含む」
↑これは
>>355 の挙げた
「 ps -o comm= -p $$ 」
↑これより可搬性あるって言えるの?
どちらもPOSIXでは規定されてるけど,どのOSでも使えるとは限らないし,
もっと言うとps -o comm= -p $$が使えないOSならpsの出力もPOSIXで定められた書式じゃなさそう。
394:デフォルトの名無しさん
20/05/26 10:37:11.76 DUXfe990.net
busyboxな環境(tiny core linux)でバックグラウンドプロセスの終了待機を行いたいんですが
psコマンドにPIDを指定する-pオプションがないので途方にくれています。
バックグラウンドプロセスは自分で起動するのでプロセスのPIDは取れてます。
psコマンドの一覧からPIDでgrepすると関係ないのも引っかかる可能性があるため困ってます。
他の手段て何かないでしょうか。
395:デフォルトの名無しさん
20/05/26 10:48:37 5zsa2F3Z.net
>>380
POSIXで定められてない書式に対応すればいいだけの話
>>381
だからpsの出力をパースすればいいだけw
396:デフォルトの名無しさん
20/05/26 11:01:33.46 5zsa2F3Z.net
>>381
どーでもいいけど、なんでバックグラウンドプロセスの終了待機でpsコマンドなんか使うの?
397:デフォルトの名無しさん
20/05/26 11:10:30 5zsa2F3Z.net
シェル芸界隈の人間って、psをgrepで~とか重い方法しか知らないよねw
398:デフォルトの名無しさん
20/05/26 13:11:20.00 EtaD8bXQ.net
rubyのspawnで 起動したプロセスを、終了待ちしたり、強制終了したり、親プロセスと一緒に殺す
URLリンク(takuya-1st.hatenablog.jp)
Ruby で、子プロセス起動をして、終了待ちをする。
終了待ちするには Process.wait( pid ) か、Process.waitall を使う
i = spawn
399:(" sleep 10 " ) Process.wait i
400:デフォルトの名無しさん
20/05/26 16:37:31 s8Kl2PhF.net
>>384
シェル芸人に親でも殺されたんか?
まあおちつけよ。
401:デフォルトの名無しさん
20/05/26 18:30:47 DUXfe990.net
ps | awk '{print $1}' | grep -w $PID
grepで-wオプションが使えることが判ったのでこれで取れました
402:デフォルトの名無しさん
20/05/26 18:52:54 5zsa2F3Z.net
>>387
なぁ、プロセスがいるかどうかだろ?
kill -0 "$PID" でいいやん?
403:デフォルトの名無しさん
20/05/26 18:53:49 5zsa2F3Z.net
それに自分で起動したプロセスを待つだけ(何もしなくていい)なら
wait "$PID" でもいいよね?
404:デフォルトの名無しさん
20/05/26 20:23:33 DUXfe990.net
>>388
kill -0 $PIDでいけました。ありがとうございます
待機中は他の処理が走るのでポーリングで待つ必要がありました
405:デフォルトの名無しさん
20/05/28 12:28:14 n9bIhKS2.net
上の方でOil Shellについて語っていた人がいたから誰か使ってるかもしれないと思って聞くけど
export -fを使おうとすると 'export' doesn't accept -f because it's dangerous.
ってエラーになるんだけどdangerousなのってどういう場合?
また一般的にexport -fは危険だから使うな派って存在するの?
406:デフォルトの名無しさん
20/05/28 18:03:48 RKI8PBxM.net
>>391
そういう派閥があるのか知らんけど,
exportしないに越したことはないと思う。
407:デフォルトの名無しさん
20/05/29 00:50:25.00 ECv3RSEQ.net
>>392
それはどういう理由でしょうか?
408:デフォルトの名無しさん
20/05/29 11:48:42 cDEYRYlQ.net
シェル変数、環境変数、関数は重要なものが多い
システムの動作、セキュリティなどに重要な影響を与えるものが多い
不用意に操作すると深刻な問題が起きる可能性が高い
こんなところでしょうか
409:デフォルトの名無しさん
20/05/29 13:13:25 5WC69G2H.net
つまりシェル変数、環境変数、関数を使うなってこと?
410:デフォルトの名無しさん
20/05/29 17:26:04 dZOo8Hm0.net
よく知らない人は使わないに越したことはない
というところかなあ
よく知らない人が使うと
重要なものを上書きしてしまうことがあるし
411:デフォルトの名無しさん
20/05/29 17:36:28 PKgR6prj.net
重要なものを上書きしてしまうというのは
どういう例でしょうか?
412:デフォルトの名無しさん
20/05/29 19:48:52 jz7GhSHA.net
そりゃまあ,素人は出刃包丁なんて使わんほうがいいわな。
職人が使ったらすごく良い道具であろうとも。
413:デフォルトの名無しさん
20/05/29 20:22:22 Jvc7lzH+.net
出刃包丁の話はしてません
414:デフォルトの名無しさん
20/05/29 21:34:05 dZOo8Hm0.net
>>397
signal とか?
415:デフォルトの名無しさん
20/05/29 21:48:30 Jvc7lzH+.net
>>400
今の話に何の関係があるの?
416:デフォルトの名無しさん
20/05/31 15:21:54.45 sIM3dDR8.net
>>399
えぇ……と,比喩っていう概念がこの世界にはあってね,
つまり物事を説明するときに例えを用いるんだわ。
まぁ例えば会社で品質管理の監査を受けてるときに
比喩を使って説明するのはよくないかも知れんが,
こんな場末の掲示板で一々真面目に受け答えする方がオカシイって話ですよ。
417:デフォルトの名無しさん
20/05/31 15:27:43.93 JRHRMyge.net
>>402
比喩は物事を説明するときに使いましょう。
物事を批判するときに使うのは意味が全くありません
なぜなら"別のもの"に例えるのが比喩だからです。
"別のもの"を批判しても意味はありません。
418:デフォルトの名無しさん
20/05/31 17:59:31.00 sIM3dDR8.net
あぁ,あの書き方で「批判してる」って捉えちゃうのか。
あいにく,読み取り能力のない人間にまでモノを教える程暇じゃないんでね。
419:デフォルトの名無しさん
20/05/31 20:56:34 9ZicJfwX.net
質
420:問されたからその都度答えていても おかしな受け取られ方すると、やる気なくすよねぇ
421:デフォルトの名無しさん
20/06/03 11:21:10 i+Bz2w1U.net
シェルの勉強中です。
引数にフルパスでファイル名を入れています。
シェル の動きとして引数がフルパスでなかった場合、エラーにしたいのですが、フルパスの判定はどうしたらいいでしょうか。
自分なりに考えたのは、
A=locate $1
if [ A = $1 ]
みたいな感じでlocateの実行結果と引数を比較して、完全一致しなかったら、フルパスじゃないのでエラーとしていました。
ただこの場合、例えばsyslogを指定した場合、locateにsyslogのバックアップ(syslog_0603みたいな)も引っかかってしまって上手く動作しませんでした
422:デフォルトの名無しさん
20/06/03 11:39:11.67 DK1HUsdg.net
最初の文字が / かどうか
423:デフォルトの名無しさん
20/06/03 12:18:14.74 gWKP5Lqg.net
case $path in /*) echo フルパウス; esac
424:デフォルトの名無しさん
20/06/03 15:17:52.52 i+Bz2w1U.net
>>407
その手がありましたか。ありがとうございます
425:デフォルトの名無しさん
20/06/05 09:46:48 kQNq3lIP.net
wgetなどを使ったシェルスクリプトを作ってファイルをダウンロードしています
該当のサイトは認証が必要でログイン処理もwgetでやっているのですが
パスワードをスクリプトなりコマンドラインとして書くのを躊躇します
(cookieを使っているので1回ログインすると数ヶ月ログインする必要はありません)
なので今はログイン処理だけは別にしてreadで入力させるようにしているのですが
パスワードを暗号化して見えなくすることは出来ないでしょうか?
暗号化してるパスワードって使いまわされるんじゃ?って心配はありますが
とりあえず今回はその問題はスルーしたいと思います
426:デフォルトの名無しさん
20/06/05 15:09:48 wkE1tuCg.net
wgetで指定したURIがセキュアなら、
パスワードもそれに乗せて送られるから、
一応経路上では暗号化されているのでは?
427:デフォルトの名無しさん
20/06/05 15:44:51.41 vEUs2R05.net
>>410
WindowsならCredential Manager、MacならKeychainを使う
それぞれcmdkeyとsecurityというコマンドでCLIからアクセス可能
428:デフォルトの名無しさん
20/06/05 15:45:22.79 vEUs2R05.net
linuxは知らん
429:デフォルトの名無しさん
20/06/05 17:08:15.88 MNdAWp8s.net
Linuxについて,古い情報だけど。
URLリンク(dayflower.hatena!!!!!blog.com)
この中でも触れられている通り,/proc/以下を叩かれたらおしまい。
多分これはmacOSでもWindowsでも似たりよったりな挙動だと思う
(パスワードを受け取るプロセスとWeb資源にアクセスするプロセスが
全然違う体系で動いてる以上,そこの間で暗証番号を遣り取りする際は
平文がそれに準ずる形で渡さざる得ないから)
430:デフォルトの名無しさん
20/06/05 17:24:24 /s+vLyih.net
>>414
それ関係ない話ですよね
431:デフォルトの名無しさん
20/06/05 19:06:10 52A66Mr1.net
そういうのはopenssl使ってるけどセキュリティーについては自信ない。
432:デフォルトの名無しさん
20/06/05 20:16:25 m3WbiNf2.net
/proc を叩かれたくなかったらコンテナ(dockerとか)使えば分離できる
/proc/*/cmdline も見れないからコマンドラインにパスワードを書くこと
に躊躇は要らない、ってのはどう?
要はそこじゃなくて TPM2.0 使って暗号化ファイルシステムマウント
しないとダメなんだろうけどさ
433:デフォルトの名無しさん
20/06/06 01:48:18 4D637/KL.net
>>410
URLリンク(www.gnu.org)
To prevent the passwords from being seen, use the ‘--use-askpass’ or store them in .wgetrc or .netrc, and make sure to protect those files from other users with chmod.
434:デフォルトの名無しさん
20/06/06 03:05:03.28 7YMZq5d4.net
漏れは自分のPC 内で、apt-get する、Ruby スクリプトに、パスワードも書いてる。
他には、yahoo へログインするスクリプトにも、パスワードを書いてる
#!/usr/bin/env ruby
# 全パッケージの更新
# sudo のパスワードを自動入力する
# echo <your_password> | sudo -S <your_command>
puts `echo パスワード | sudo -S apt-get update`
puts `sudo apt-get upgrade -yV`
435:デフォルトの名無しさん
20/06/06 05:11:44 fEYYKFMK.net
root取り放題
436:デフォルトの名無しさん
20/06/06 08:55:47 BnF/2e3e.net
モヤる気持ちはわかる
437:デフォルトの名無しさん
20/06/06 10:25:47.70 X82aLPfs.net
まあ,パスワードとかそういう機密情報周りは難しいよね(無難な結論)
ともかくこのスレの原則に反するけど,ほんとうに機密性を重視したかったら,
「シェルで色んなコマンドを組み合わせて実現する」よりも
「一つの強固な環境で全ての機能を構築して,そこで実現する」っていう方針の方が良い気がする。
気がするだけで根拠とかは一切ないw
438:デフォルトの名無しさん
20/06/08 22:18:24.29 NLc7dq7/.net
foo 3>&1
3を変数にするにはどうすればいいの?
foo "$FD">&1
エラーになる
439:デフォルトの名無しさん
20/06/08 23:35:37.35 UPXG9UaF.net
>>423
eval "foo ${FD}>&1"
440:デフォルトの名無しさん
20/06/09 01:07:13.62 Sn2l65YM.net
3>&1みたいなFDの切り替えってどんな時に使うの?
FDとリダイレクトの意味は分かってるしエラー出力も使えてるけどこの使いこなすのはさっぱり
441:デフォルトの名無しさん
20/06/09 08:46:32.64 a8EVQfut.net
ちまちまリダイレクトするのが面倒くさい時かな?
exec 3>&1 > script.log 2>&1
echo "Phase 1 start" >&3 # 端末に出力
goo ... # 標準出力/エラー出力は script.log に自動的にリダイレクト
hoo ...
echo "Phase 2 start" >&3 # 端末に出力
...
この場合は各フェーズを関数化して、関数呼び出しに対して
都度 script.log へリダイレクトするべきだが
ただ、exec 以外で > の左に指定する数字が 1,2 以外になるパターン
( foo 3>&1 )は知らねえ
ファイルディスクリプタ 3 番に対して open せずにいきなり書き込む
のは抵抗があるわ
442:デフォルトの名無しさん
20/06/09 08:51:44.16 MxhGccu+.net
上のようなことをしてる関数がfooとかかな。3がfifoとかなんかで
443:デフォルトの名無しさん
20/06/09 11:53:36.51 UgSyYe/8.net
>425
標準エラー出力を変数に入れるときに使う
444:デフォルトの名無しさん
20/06/09 20:36:13.51 JL8YwnMO.net
>>427
あー,FIFOか。自分ではほぼ使わない(専ら標準入出力とパイプ)だから思い付かんかったけど,たしかにFIFOなら3とかに繋ぐのはありそう。
445:デフォルトの名無しさん
20/06/11 14:08:25.44 IxigL/zf.net
ret=$(printf '\n\n\n\n\n')
if [ "$ret" = "" ]; then
echo true
fi
これってなにげに罠だと思うけど
なんで誰も疑問視しないの?
446:デフォルトの名無しさん
20/06/11 14:17:42.98 ibS6rTlb.net
規格による正当な動作だから
447:デフォルトの名無しさん
20/06/11 14:24:11.61 IxigL/zf.net
その
448:正当な動作がおかしいだろって話 仕様バグ
449:デフォルトの名無しさん
20/06/11 14:25:39.14 IxigL/zf.net
つーかさ、誰もハマらないの?
echo で最期に改行がついていても -n で改行を無くしても
同じになるっておかしいと思わないの?
450:デフォルトの名無しさん
20/06/11 14:29:59 ibS6rTlb.net
コマンド置換で最後の改行続きに意味があるというのは少ないんだろう
それで意味ない改行を消すのはめんどくさいというのならば、理にかなってる
大事ならコマンド置換のコマンドで最後にスペースでも強制的につければいいだろう
仕様考え今までそれを使ってる準じてshell作ってる他諸々はお前よりは賢いことは確かだから、お前が仕様バグと言っても鼻で笑われるだけだろうw
451:デフォルトの名無しさん
20/06/11 14:32:01 ibS6rTlb.net
>>433
そういう仕様だから。明確に書いてあるから
仕様を読んですらいないのが明らかだな
452:デフォルトの名無しさん
20/06/11 14:41:06.98 92eNOFs2.net
仕様を読み込んで全部把握してから
言語を使うやつなんていねーだろ
453:デフォルトの名無しさん
20/06/11 14:50:35.57 ibS6rTlb.net
おかしいと思ったら調べるのは普通だわな
自分が絶対正しいマンは知らんけど
454:デフォルトの名無しさん
20/06/11 15:13:40.27 92eNOFs2.net
>>437
それでなんでそういう仕様なのか、お前は調べたのか?
455:デフォルトの名無しさん
20/06/11 15:35:16 VbX/tETo.net
仕様は、読んで(どういう意図かを読んで)理解するものだぞ?
お前は仕様を理解するために仕様を説明してるとこを読むのが普通なのか?
456:デフォルトの名無しさん
20/06/11 15:39:01 92eNOFs2.net
>>439
だからどういう意図でそういう仕様になってるのかって聞いてるんだが
お前は仕様だったら、そうなってる理由とか何も考えないのか?
457:デフォルトの名無しさん
20/06/11 15:45:20 VbX/tETo.net
最後の改行(の続きに)は意味がない
と普通に読めるだろ。文(の意図)を読めなさすぎ
458:デフォルトの名無しさん
20/06/11 15:48:46 VbX/tETo.net
>仕様を読み込んで全部把握してから
という 仕様を読む読まない から、あっさり、
>なんでそういう仕様なのか
読んでどうというようにすり替えてるし、いつもの文を読めない読まない自己都合で言葉を吐くだけのやつか
459:デフォルトの名無しさん
20/06/11 15:49:29 92eNOFs2.net
最後の改行に意味がないという理屈なら
catコマンドとかも最後の改行は消えるべきでは?
460:デフォルトの名無しさん
20/06/11 15:51:14 VbX/tETo.net
物事は01ではできてないと理解しような
似たようなので違うとか普通にあるだろうに
しかし、いつものだなw
461:デフォルトの名無しさん
20/06/11 16:24:52.88 92eNOFs2.net
0か1ではないという当たり前ことを言うだけで
理由については一切何も考えてないってことがよく分かるなw
462:デフォルトの名無しさん
20/06/11 16:50:05.12 VbX/tETo.net
>0か1ではないという当たり前こと
らしいけど>>443って言うんだな
理由ww 場合による=01ではないだろに。ホントに文が読めない書けないみたいな感じ
てか、そのレスから明らかすぎるほど明らかにいつものだったな
463:デフォルトの名無しさん
20/06/11 16:58:04.41 VbX/tETo.net
まとめ
仕様を読んでない
(最初から)仕様読むのが当たり前か
疑問に思ったら仕様を読むのは当たり前
仕様読んで意図がわかるのか
~という意図だと読めばわかるだろ
AとBが違う
01じゃないんだから、違うのも普通にある
理由については一切何も考えてない
www
いつものむちゃくちゃ、ああ言えばこう言うというナゼか執着心だけが強いお人でした
Fin~
464:デフォルトの名無しさん
20/06/11 16:59:11.72 92eNOFs2.net
>>446
> 理由ww 場合による
その「場合」がどんなときかと聞いてるんだろ
465:デフォルトの名無しさん
20/06/11 17:00:17.93 VbX/tETo.net
お前のママじゃないんだから、なんでなんでにいつまでも答えるわけねえだろ、いい加減
ママに聞きなさい。じゃあね
466:デフォルトの名無しさん
20/06/11 17:03:50.41 92eNOFs2.net
な?結局、ここにそれを書けと言っても
書いてあるはず。それを見ろ。というだけで答えられないわけさ
467:デフォルトの名無しさん
20/06/11 17:05:12.16 VbX/tETo.net
>ここにそれを書けと言っても
何様なんだかな... お子様かw
468:デフォルトの名無しさん
20/06/11 17:06:49.63 92eNOFs2.net
ほらまた論点とは別の話をし始めてる。な、そういうとこだよ
469:デフォルトの名無しさん
20/06/11 17:08:27.87 VbX/tETo.net
オマいうwwwww
470:ホント、ツッコミしやすすぎて...すげえな。キリがないから、じゃ、ほんとに
471:デフォルトの名無しさん
20/06/11 17:38:44.92 92eNOFs2.net
シェルの話をしてるか、人の話をしているかで
だいたい区別できるよな
472:デフォルトの名無しさん
20/06/14 01:56:01.34 eRp+24Cv.net
マジか・・・、set -vって関数の中身は一行ごと表示してくれないのか・・・
473:デフォルトの名無しさん
20/06/14 10:56:11.88 rnZVTcdX.net
一時期,set -vとかを駆使してシェルスクリプトの自己文書化に拘ってた時期があった。
あまりに無毛だったんで止めたけどw
474:デフォルトの名無しさん
20/06/14 11:05:27.03 Wt6fQqct.net
パイパンかw
475:デフォルトの名無しさん
20/06/14 11:35:23.18 v+4IVp6H.net
>>457
頭ではなく下の方にしたのは優しさか
476:デフォルトの名無しさん
20/06/14 13:38:52.36 eRp+24Cv.net
>>456
自己文書化ってどんなの?
477:デフォルトの名無しさん
20/06/14 13:57:38.38 nNGIeJAo.net
プリンターに髪をsetするんだろう
478:デフォルトの名無しさん
20/06/15 17:56:08 XCzEYIlJ.net
>>459
例えば
while getopt opq:h opt; do
case $opt in
o) # -oオプションの説明。
...;;
p) # -pオプションの説明。
...;;
q) # -qオプションの説明。
...;;
h) selfdoc ;;
esac
done
みたいなオプション解析において,
-hオプションを読み取った場合に,
自分自身のシェルスクリプトを
?自己文書モード?みたく実行して,
case文の場合分けの先にある#コメント以降の文字を
次々出力する,みたいなこと。
こうすると-hオプション用に説明を用意する必要が無くなる。
479:デフォルトの名無しさん
20/06/15 17:57:43.88 ynPWkyxw.net
set -vでそれができるの?
480:デフォルトの名無しさん
20/06/15 19:25:07 XCzEYIlJ.net
>>462 お前は直前のレスしか覚えてられないのか?w
481:デフォルトの名無しさん
20/06/15 19:28:42 leNERqqh.net
コレかな?ドキュメンテーションコメント?
シェルスクリプト群のドキュメント書くの面倒だから自動でREADME.mdを生成する
URLリンク(qiita.com)
482:デフォルトの名無しさん
20/06/15 19:35:39 ynPWkyxw.net
>>463
だからset -vの話をしてるんだけど
できないから聞いてるの
483:デフォルトの名無しさん
20/06/17 01:36:20 IyVPQdQC.net
MacOS 10.13.4です
1.ディレクトリ内(旧フォルダ)でサイズが一番大きなファイルを抽出
↓
2.リスト.txtのn行目にある文字列(Wordと定義)を抽出し
↓
3.名前をWord.txtに変更&新フォルダに移動
という動作をさせたいです
#!/usr/bin/bash
n=1
LISTPATH="~/Desktop/リスト.txt"
PATH1="~/Desktop/旧フォルダ" #ここにファイル群が入ってます
PATH2="~Desktop/新フォルダ"
#1.最も大きなサイズのファイルを抽出しFILEとして定義
FILE=`ls -1 -S $PATH1/* | head -1`
#2.リスト.txtのn行目の文字列をWordとして定義
Word=`sed -n '$n'p '$LISTPATH'`
#3.旧フォルダにあるファイルをWordにリネームした上で新フォルダに移動
mv $PATH1/$FILE $PATH2/Word.txt
こんな感じで書いてみたのですが2.で"sed : 1 :invalid command code U"のようなエラーが出て先に進めません
ターミナルで直接コマンドを入力すると成功するのでおそらく変数やメタ文字の扱いが悪いのだと思います
ですがいろいろ調べて試してみたのですが一向に変わる気配がありません
間違っている点等、あるいは別の方法などありましたらご教授願います
484:デフォルトの名無しさん
20/06/17 01:55:47 IyVPQdQC.net
リストですが
りんご
みかん
ばなな
いちご
こんな
485:風に単語が入ってます それとややこしくて申し訳ないのですが sed -n のnはオプションです n行目の文字列を抽出、に関してはこちらのサイトに別の方法も載っていたので試してみたのですがやはりエラーが出てしまいました https://qiita.com/kazu56/items/2936ed6f337f288b25c9
486:デフォルトの名無しさん
20/06/17 02:26:54.62 iASQjm1j.net
>>466
>Word=`sed -n '$n'p '$LISTPATH'`
とりあえず変数はダブルクウォートで囲もう
shellcheckにかけてエラーや警告から学ぶと良いと思う
487:デフォルトの名無しさん
20/06/17 04:10:45 H0Dcbe9T.net
' を、" に変えたら「りんご」が取得できた
Word=`sed -n "$n"p "$LISTPATH"`
echo $Word
488:デフォルトの名無しさん
20/06/17 12:08:45.15 IyVPQdQC.net
>>468-469
ダブルクォーテーションに変えて無事"りんご"を取得できました
そして最終的に3は
mv $FILE $PATH2/$Word.txt
と修正して動作成功しました
見ての通り初心者ですので今後は変数の扱いも含めしっかり勉強していきます
shellcheckも使っていきたいと思います
ありがとうございました
489:デフォルトの名無しさん
20/06/17 17:45:33.68 ja1Hhc1L.net
Linuxで近似画像抽出って不可能?
解像度だけ違うとかpngをjpgにした同じ画像とか
画像相手にハッシュで判別とかアホらしいしさ
490:デフォルトの名無しさん
20/06/17 18:37:04.24 UMZJaayo.net
全くLinuxどうのという話ではないだろう
AIの分野だな。やろうと思えばLinuxでできるだろう。Linuxに限らずどのOSでもだけど
491:デフォルトの名無しさん
20/06/17 19:16:36.41 gquwKRiO.net
gqviewは非常に優秀
492:デフォルトの名無しさん
20/06/17 22:35:51.76 MW1JUI55.net
なぜシェルスクリプトのスレに書き込んだのかコレガワカラナイ
493:デフォルトの名無しさん
20/06/17 23:38:01.91 H0Dcbe9T.net
このshellcheck は有用
警告・エラーメッセージなどを、国際化(日本語化)すべき!
494:デフォルトの名無しさん
20/06/18 00:02:30.93 qaboPGNj.net
>>475
言いだしっぺ
495:デフォルトの名無しさん
20/06/18 11:07:19 kWYo0BCq.net
シェルスクリプトが国際化できんのだから,shellcheckにしても然り。
496:デフォルトの名無しさん
20/06/18 12:00:17.90 YEv8iIAV.net
だから言い出しっぺがということね
497:デフォルトの名無しさん
20/06/18 12:32:46.90 FBRgI1FZ.net
簡単なシェルスクリプトならググらず書けるようになったけどクッソ読みにくい
case使わずifだらけにする癖が付いたからだけど
コマンドの仕様が統一されてないからほんと迷うわ
lsみたいにオプションの集約や指定位置が自由なのもあれば融通が利かないのもあるし
498:デフォルトの名無しさん
20/06/18 16:03:41.90 kWYo0BCq.net
オプションの規約はここ
<URLリンク(pubs.opengroup.org)
に書かれている通り,
本来は被演算子は最後にしか持って来れないし,
オプションは “-o” という連字符一文字・英字一文字の形式しか認められてない。
lsはGNUとかで拡張されて,被演算子を途中に持って来れたり,
連字符二つ・英数字複数の長いオプションが使えたりするけど,
可搬性を重視するなら止めたほうがいい。
可搬性を重視しないなら,お好きにどうぞ,でも,
老婆心ながら言うと,困ると思う。
現に「lsではオプションの置き場所が自由なのに
このユーティリティではそうじゃない」
っていう風に困ってる訳だし。
499:デフォルトの名無しさん
20/06/19 11:57:59.31 xXxRIFf6.net
あぁGNU拡張はUNIX哲学に反するから悪ってことか
便利な分横着して悪
500:癖が付いたら困るもんな 機能は盛るけど極力使うなって実に杓子定規というか
501:デフォルトの名無しさん
20/06/19 17:24:24.21 gQU/M+Sr.net
UNIX哲学に反したGNU拡張ってなに?
オプション名は1文字なんていうのがUNIX哲学とは思えないな
502:デフォルトの名無しさん
20/06/19 22:49:12 zEq7EJiO.net
広義では哲学と言えなくもないな
XBD Utility Syntax Guidelines
URLリンク(pubs.opengroup.org)
XBD : Single UNIX Specification's Base Definitions
503:デフォルトの名無しさん
20/06/20 02:57:37 n0lXBS13.net
ガイドラインなら哲学じゃないな
504:デフォルトの名無しさん
20/06/20 11:04:41.29 n5C6ULNh.net
単純馬鹿にはそうなんだろな
505:デフォルトの名無しさん
20/06/20 20:15:36.78 y/L3Z2RW.net
systemdとかいう反UNX哲学の旗頭
506:デフォルトの名無しさん
20/06/21 09:35:40.38 IKNG1Fdo.net
言うほど反UNIXか?
一連の騒動を見ていて,
なんかsystemdの製作者を嫌う一部の人たちが
「UNIX哲学」を錦の御旗にしてsystemdに反発して,
それにUNIXをよく分かってない沢山の人々が
盲目的に加勢してる,っていう印象を受けたけどな。
507:デフォルトの名無しさん
20/06/21 09:42:27.13 IvBo3j6N.net
気持ちは分からんでもないけどね
508:デフォルトの名無しさん
20/06/22 08:36:37.15 sDTlcsla.net
systemdは開発者が問題児だから批判されたって読んだ希ガス
わざわざsvchostを持ち込んだ責任は重いけどそれだけじゃないのよね
509:デフォルトの名無しさん
20/06/22 09:33:16 tLwRlm9z.net
そんなんあったんとググったら
2014-04-03
URLリンク(cpplover.blogspot.com)
なんてな、なるほどな。でも、
2014-09-22
URLリンク(japan.zdnet.com)
とか、Linus御大はちょっとは寛容になったのか?
だが、
2016年10月5日
URLリンク(gihyo.jp)
まだ続いていたのね。そして現在もまだ続いているのかというw
510:デフォルトの名無しさん
20/06/22 09:36:00 tLwRlm9z.net
ああ、注目されているののは、UNIX哲学というより、手前勝手にやってんじゃねえ&品質悪いだろが主だな上記のは
511:デフォルトの名無しさん
20/06/22 21:15:42 83oEFw3E.net
作者が嫌いならそう言えばいいのに
UNIX哲学とかなんとか持ちだすのが卑怯というか嫌らしいなと思った(小並感)
512:デフォルトの名無しさん
20/06/23 09:57:12 giQS7MtY.net
でもその粗末なものを不本意でも導入したってことはそういうことだよね
対抗したのはdebianくらいでしょ
513:デフォルトの名無しさん
20/06/23 13:34:53.18 4ygLxlxX.net
Debianもsystemdなんですが。
514:デフォルトの名無しさん
20/06/23 23:09:30.34 LfK68hWg.net
それもどちらかというと早く取り入れた方じゃんw
515:デフォルトの名無しさん
20/06/24 08:21:39.73 fB1/4/mN.net
POSIXの次のissue (issue 8?) が出るのっていつ,とか分かる?
さっさと$'\n'表記を臆面なく使いたい
516:デフォルトの名無しさん
20/06/24 16:45:25.56 evfa9tXu.net
どうせシェルが対応してないだろ
517:デフォルトの名無しさん
20/06/25 20:11:27 9YSX2wtH.net
指定した変数を復旧可能な形でダンプする方法(ようするにシリアライズ)は
bashとかだとdeclare -p abcとかでできますが
dashで同じような事をする方法はりますか?
setとかだと特定の変数だけはできないと思います。
518:デフォルトの名無しさん
20/06/25 23:23:44.84 gX/RvIRg.net
>>498
復旧っていうのが出力を
519:再度shに読み込ませて代入できる、 っていうことだとすれば、env。 ただし $ VAR='***' と代入していた場合はenvの出力で引用符が外されて 対話環境だとマズいことになる。
520:デフォルトの名無しさん
20/06/25 23:41:04.14 9YSX2wtH.net
>>499
envでどうやればできるんです?
521:デフォルトの名無しさん
20/06/26 08:57:30.48 Sc0VO8uZ.net
>>500
それくらい自分で…とも思うけど
$ env | grep -e '^USER='
522:デフォルトの名無しさん
20/06/26 08:57:35.06 yEClztmT.net
選ばれなかった西村カワイソス
URLリンク(i.imgur.com)
URLリンク(i.imgur.com)
URLリンク(i.imgur.com)
URLリンク(i.imgur.com)
URLリンク(i.imgur.com)
523:デフォルトの名無しさん
20/06/26 09:36:17.92 50iMo9Ym.net
>>501
それじゃだめですね
1. でません
$ abc=123
$ env | grep abc
$
2. 誤爆します
$ export abc='USER=1
USER=2
USER=3
USER=4'
$ env | grep -e '^USER='
USER=name
USER=2
USER=3
USER=4
524:デフォルトの名無しさん
20/06/26 09:39:15.48 50iMo9Ym.net
3. 復旧できません
$ export abc='USER=1
aaa
bbb
ccc'
$ env | grep -e '^USER='
USER=name
525:デフォルトの名無しさん
20/06/26 11:24:38.83 Sc0VO8uZ.net
多機能を望むならBash使っとけば,って思っちゃうw
マジレスするとsedでエスケープとかすりゃいいんじゃないっすかね。
(なんかPOSIXシェルでXMLパーサー実装した!みたいな人思い出した。
「自分のやりたいこと」と「それを実現する環境」が明らかに釣り合ってない)
526:デフォルトの名無しさん
20/06/26 14:58:30.56 di73h+MO.net
sed(とか)使っていいんだったら、
値は ' で囲む、値中の ' は '\'' に変換する
だけでいいような
527:デフォルトの名無しさん
20/06/26 15:05:44.69 50iMo9Ym.net
>>506
例えば、この場合は?
aaa="'abc' 'def'"
528:デフォルトの名無しさん
20/06/26 15:18:09.38 di73h+MO.net
aaa=''\''abc'\'' '\''def'\'''
529:デフォルトの名無しさん
20/06/26 17:26:15.56 50iMo9Ym.net
>>508
シングルクォートなくなってるぞw
530:デフォルトの名無しさん
20/06/26 18:59:02 Sc0VO8uZ.net
ちなみにそれでも
VAR='a
b=c
d'
みたいなのには対処できない。
いや〜果てしないっすね,POSIX原理主義を貫くとw
531:デフォルトの名無しさん
20/06/26 19:38:40.29 SG/+b/+N.net
世の中bashオンリーになってくれれば楽なんだけどね。
dashが使われてる現実がある。現実主義者は辛いよ。
532:デフォルトの名無しさん
20/06/26 20:42:38 Sc0VO8uZ.net
現実にはBashが使える環境が大半だと思われ。
AIXみたいな極一部の環境を想定することを「現実主義」と言うのは間違ってると思うよ。
まあ,多分「現実主義」と本気で考えてる訳じゃなくて,
俺の書き込みにカッとなって「自分の方が現実見てますアピール」をしてるんだろうが。
533:デフォルトの名無しさん
20/06/26 20:47:57 0CWC8I0Q.net
debian/ubuntuの/bin/shがdashなのを知らないの?
534:デフォルトの名無しさん
20/06/26 20:49:25 0CWC8I0Q.net
URLリンク(news.mynavi.jp)
UbuntuとDebianをあわせてLinuxの57.1%なんだが
535:デフォルトの名無しさん
20/06/26 20:52:00 0CWC8I0Q.net
dashという名前がでてるのにAIXを思い浮かべるあたり現実を知らんとしか思えんな
AIXのデフォルトシェルはBourne shellかkshだろうに
536:デフォルトの名無しさん
20/06/26 21:44:27.05 WqCeXtR5.net
>>509
無くなってないだろ
537:デフォルトの名無しさん
20/06/26 22:04:15.47 WqCeXtR5.net
>>510
foo () {
echo "$1='$(eval echo "\"\$$1\"" | sed -e "s/'/'"'\\'"''/g")'"
}
VAR='a
b=c
d'
echo "$VAR"
bar="$(foo VAR)"
echo "$bar"
VAR=''
echo "before: $VAR"
eval "$bar"
echo "after: $VAR"
一応dashで動いているようだけど?対処できないって?
538:デフォルトの名無しさん
20/06/26 22:33:00 WqCeXtR5.net
とりあえず、三つの環境で試してみたが動いているかな
こんな簡単でいいのかというのは拭えないが
しかし、
コード書けないのか書かないのか、
ちゃんと考えず検証もせずに、
自分の頭の中もしくはおま環だけで、
解決にも繋がらないのをよく続けてたな、どっちも
って感じ
539:デフォルトの名無しさん
20/06/26 22:55:36.19 Sc0VO8uZ.net
出、出〜両成敗言奴〜
540:デフォルトの名無しさん
20/06/26 23:06:55.36 WqCeXtR5.net
レスはするがそんなレスしかしないのは、
対処できないってことはないってことでいいいのね
541:デフォルトの名無しさん
20/06/27 09:22:36.01 VhavnPnf.net
最近はpwshが便利でお気に入り
bashは何をやるにもめんどくさくてだめだ
未だに引数の解析をloopとcaseでやるとか原始時代かよ
542:デフォルトの名無しさん
20/06/27 09:40:10.35 gS37C1rZ.net
その程度の問題ならライブラリを作るだけで解決するんだがな
543:デフォルトの名無しさん
20/06/27 22:42:10.04 712NPp+Q.net
getopts知らない可能性が微レ存
544:デフォルトの名無しさん
20/06/27 22:53:58.90 vaH0ijdP.net
getoptsもループだろ
545:デフォルトの名無しさん
20/06/27 23:10:59.70 gS37C1rZ.net
getoptsは文字列操作が苦手なC言語のためのもので
それをそのままシェルスクリプトに移植しても
あまり意味がないんだよな
しかも設計がUnixの歴史の初期の頃のものだから
最近の言語のものに比べて使いやすくもない
546:デフォルトの名無しさん
20/06/28 18:17:34.25 AbPoRZT9.net
rust製のコマンドが流行って来てるね
shft-jis対応が微妙なのが多いけど
547:デフォルトの名無しさん
20/06/29 11:20:40.30 rI2xXdg9.net
今時Shift-JISなんて使ってるとこがおかしいw
548:デフォルトの名無しさん
20/06/29 15:44:22.24 6OaJq9UQ.net
Windowsでbashやpythonのスクリプトを書いてると
表立っては目に見えなくはなってるけど
未だにcp932の呪縛から逃れられない
エラーが出て改めて気付かされる
549:デフォルトの名無しさん
20/06/29 17:28:25.05 KH0T80po.net
WSLでええんちゃうの
550:デフォルトの名無しさん
20/06/29 19:53:16.74 tYVp58Ca.net
cp932を使う必要ないよ
551:デフォルトの名無しさん
20/06/29 19:55:39.65 tYVp58Ca.net
そもそもファイルはUTF-8で書く
各コマンドはWindowsネイティブのUTF-16で出力する
(UTF-16はWSLにわたすとUTF-8に変換される)
とまあUnicodeで完結するわけで
cp932とかいらないし、でてこない。
552:デフォルトの名無しさん
20/06/29 22:49:57.66 P14Kkthl.net
WSLのウリの一つであるLinuxとWindowsのシームレスな運用という点を活かそうと、
WSLからWindowsのプログラム(cp932対応)を呼び出し、応答を受けたりしようとする場合には、
cp932に全く触れないで済む、とは必ずしも言えないでしょう。
これに加えて、python 2だった頃は、もうユニコード地獄とともに、cp932を常に意識しないとならなかったけど、
python 3になって、ずいぶん楽になったわ。
いずれにしても、対応するプログラム次第だな。
553:デフォルトの名無しさん
20/06/29 23:21:10 cNuHuLWV.net
>>532
> WSLからWindowsのプログラム(cp932対応)を呼び出し
なんのことでしょうか?
まずWindowsのコマンドは全てUnicode対応です。
chcp 65001でUTF-8に変更してちゃんと表示されるのがその�
554:リ拠です。 またWSLからWindowsのコマンドを呼び出した場合、それはUnicodeで出力されます。 例えば絵文字などcp932にない文字を含んだファイル名があるディレクトリを表示してみてください 問題なく表示されるはずです。 例 WSL上で実行: $ cmd.exe /c dir c:\\dir 同様にそのコマンドを他のプログラムにリダイレクトしてみてください 例 WSL上で実行: $ cmd.exe /c dir c:\\dir | less この場合chcp 65001されたのと同じように英語モードに切り替わりますが ファイル名は文字化けしません。nkfを使えばUTF-8であることが判明します。 例 WSL上で実行: $ cmd.exe /c dir c:\\dir | nkf --guess UTF-8 (CRLF) WSLからWindowsのコマンドを呼び出す際、cp932に触れることはありません。
555:デフォルトの名無しさん
20/06/30 00:47:57 qHUx6lkJ.net
cp932とかshift-jisとか別に対応しなくてもいい、必要ならユーザ側で変換すればいいだけの話でもある
cp932とかshift-jisとか日本でも今更の方が多いのに、日本/日本人じゃないプロダクトで対応を求めるのはまあない話だな
556:デフォルトの名無しさん
20/06/30 00:54:07 3w3RlvW0.net
>>532
>ユニコード地獄
って何??地獄というほどだからすぐに出せるほどのでしょう
まさか、よくある非難批判自説強めるためにだけのことさらのではないだろうから、具体的にどうか
557:デフォルトの名無しさん
20/06/30 13:29:30.53 4tQoD8Fw.net
言いたい事は伝わるけど日本語が不自由すぎる
558:デフォルトの名無しさん
20/06/30 13:45:57.96 ww2Xd+MO.net
結局文字コードに関しての理解が浅いから
Windowsはcp932なんだよ!だからcp932を使うんだよ!
そしてcp932扱おうとすると難しいんだよ!ってなるんだよ
普通にUTF-8を使っていれば、Windows(Unicodeがネイティブの文字コード)とも
Linuxとも相性がいいのに
559:デフォルトの名無しさん
20/06/30 14:08:10.20 rT4NJ8lb.net
テキストの中身はいいとしてファイル名()
560:デフォルトの名無しさん
20/06/30 16:43:12.21 v6RmXu90.net
ファイル名でも同じだな
結局文字コードに関しての理解が浅いから()
561:デフォルトの名無しさん
20/06/30 17:02:50.63 NeVIM/JQ.net
cp932を使ってる環境が今でもある以上、それに対応する必要はあるだろ
自分で管理できる環境しかいじらないのであれば、utf-8にでも統一すればいいが
そうじゃない場合はそのままではどうしようもない
utf-8が当たり前だと思ってるやつは、euc-jpとかも使ったこともないんだろうな
以前はperlなんかのcp932ダメ文字対策にはこれしかなかった
562:デフォルトの名無しさん
20/06/30 17:11:34.24 2vqY+HLu.net
めんどくさいのを知ってるからUTF-8に統一できるのだからそれにしたそれにするって話なのに
未だにcp932だの言ってるのはめんどくさくないんだろ?文句言うなw
563:デフォルトの名無しさん
20/06/30 18:38:38.55 KNAz+qB3.net
めんどくさいけどそれを避けられないという場合もあるという話だろ
巷にはまだまだ古い環境が残ってるんだよ
自分のせいじゃないんだから文句くらい言わせろw
564:デフォルトの名無しさん
20/06/30 19:14:10.54 XR44DBqi.net
チラ裏にでも書いてろって話だな
565:デフォルトの名無しさん
20/06/30 19:24:16.74 nJuhvFVE.net
cp932 を UTF-8 にマイグレーション:めんどくさいからやりたくない
cp932 <> UTF-8 処理中に逐次相互変換:めんどくさいからやりたくない
cp932 <> UTF-8 フロントエンドで相互変換:めんどくさいからやりたくない
自分で対応できることをやりたくないから、誰かがcp932対応しろ
って話ですね
566:デフォルトの名無しさん
20/06/30 20:52:19.85 tmp+8cJm.net
すでにcp932に対応しているので遠慮しておきます
567:デフォルトの名無しさん
20/06/30 21:00:48.27 ww2Xd+MO.net
>>540
> cp932を使ってる環境が今でもある以上
UTF-8に変換して処理が終わったら戻せばいいだけ
568:デフォルトの名無しさん
20/06/30 21:54:26.59 nHUgkpqk.net
それを世の人は「対応」という
569:デフォルトの名無しさん
20/07/01 00:00:33 nsCEyl21.net
元レスのヤツがその対応してないのに対してのだろ
とんちんかんじゃね
570:デフォルトの名無しさん
20/07/01 00:55:56.18 bhKr/oya.net
日本語でおk
571:デフォルトの名無しさん
20/07/01 01:31:07.01 keO9QSLH.net
Windows を使う�
572:フは大変なんだな。 …ああ、それが無理だから Linux しか使わなくなったんだった。
573:デフォルトの名無しさん
20/07/01 06:57:53.27 lozEWamw.net
多分なcp932をUTF-8に変換して戻せばいいって聞いた時
間抜けなやつは、コードの中でいちいち変換してるんだよ
func() {
str_sjis=$1
str_utf8=$(sjis_to_utf8 "$1")
ret_utf8=$(foo "$str_utf8")
ret_sjis=$(utf8_to_sjis "$ret_utf8")
echo "$ret_sjis"
}
こんな感じでな。コードのあちこちでこのような変換を行ってる。
あー、あほあほ、ばからしすぎる
コマンド呼び出しの前に外部コマンドで変換してしまうという発想がない
574:デフォルトの名無しさん
20/07/01 07:44:48.00 61AWgfbD.net
cp932からutf8は不可逆変換
575:デフォルトの名無しさん
20/07/01 08:54:24.38 lozEWamw.net
>>552
それがどうかしたの?
576:デフォルトの名無しさん
20/07/02 00:24:14.35 oVzUH9JU.net
自己紹介しなくてもいいのにねぇ
577:デフォルトの名無しさん
20/07/02 00:53:42.38 9cYvmHwP.net
テキストエディタを作る時、内部のデータをUnicodeで持つか
あらゆる文字コードでデータが持てるようにするかの違い
あらゆる文字コードに対応するのは大変だから
ファイル読み書き時に変換し内部データはUnicodeでもつのが普通
シェルスクリプトで言えばiconvやnkfなどのフィルタを使って
文字コードを変換すれば、シェルスクリプトでは全てUTF-8として扱うことができる
シェルスクリプト以外の各言語でも同じことができる
なぜ未だにcp932のことを考える必要があるのかわからない
578:デフォルトの名無しさん
20/07/02 00:58:14.59 9cYvmHwP.net
そもそもWindowsはUTF-16がネイティブで
すべてのCLIコマンドはUTF-16で出力するのに
一体誰がcp932を出力するのかわからない
なおWindowsから標準出力にUTF-16で出力したデータは
WSL上のコマンドで受け取ったときには自動的にUTF-8に変換されている
(ファイル読み込み時に勝手にデータが変換されるという意味ではない)
579:デフォルトの名無しさん
20/07/02 04:04:30.63 7rdALa4M.net
>内部データはUnicodeでもつのが普通
厳密にはOS(API)のネイティブな文字コードだな
今時のOSのはUnicodeだから間違ってもいないけど、多分、古いWindowsのはShift-JISなんじゃないかな
580:デフォルトの名無しさん
20/07/02 04:37:48 9cYvmHwP.net
古いWindowsとか適当なことを言うな
Windows 95よりも早く開発していた
Windows NTは最初からUnicodeだ
581:デフォルトの名無しさん
20/07/02 04:57:08.09 mSCtcEnU.net
XPでCygwinでシコシコやってた頃は、
cp932やらeuc-jpやらで大変だったなぁ
対応版が出るまで、utf-8? 何それ美味しいの? 状態で、
まともに使えるように、いろいろおまじないしてたっけ
582:デフォルトの名無しさん
20/07/02 10:38:14.71 6iBChMal.net
>>95
Windows 95よりも早く開発していたなんて嘘言うなよ
内部と表層は違う。Unicodeが表層にもなったのは最近だろ
Windows 95よりも早くとか曖昧なとこで完全な嘘だしな。痴呆で忘れたか?
583:デフォルトの名無しさん
20/07/02 10:39:39.66 6iBChMal.net
>>560
誤 >>59
正 >>558
584:デフォルトの名無しさん
20/07/02 12:02:46.70 9cYvmHwP.net
>>560
URLリンク(ja.wikipedia.org)
> IBMと共同で開発していたOS/2のバージョン2の次期バージョンをWindows NTとし、
> IBMとは別に製品を開発していくこととなる。最初のバージョンは3.1であり、
> これ以前に発売されていたWindows 3.1と互換性があるため、Windows NTの
> 最初のバージョンも3.0ではなく3.1として発売した。これはWindows3.1と歩調を揃えるという、
> マーケティング上の理由による。
>
> 以下、英語版の発売年を併記する。
>
> Windows NT 3.1(1994
585:年) > > 初期バージョン。コードネームはWNT。デスクトップ シェルとしてWindows 3.1と > 同じユーザインタフェースを採用していた。英語版は1993年7月27日に発売された。
586:デフォルトの名無しさん
20/07/02 12:05:14.83 9cYvmHwP.net
>>560
表層とか曖昧なことを言うなよ
アプリの問題とOSの問題は違う
Windows NTの表層(笑)はUnicodeだ
9x系用アプリの表層が違うだけ
587:デフォルトの名無しさん
20/07/02 13:33:50.59 ACoXsYjy.net
Windows API には システムエンコーディング対応のとUnicode対応のがある
日本語に限っては、システムエンコーディングがUTF-8対応になったのはつい最近、当然それ以前はShift-JIS
てとこかな、ググったとこでは
UTF-8に対応してないのにわざわざUnicodeに対応しようとはしないわな当たり前に
システム内部でUnicode対応していようが、Shift-JIS APIしか「使えない」んだったら内部で対応していようがデベロッパーには見えない部分だし、そんなアプリが普通でもおかしくはないな
588:デフォルトの名無しさん
20/07/02 13:45:58.39 ACoXsYjy.net
>>562
なんの引用かいまいちわからんけど、Windowsが内部的にUnicodeになったのはWindows NTからみたいだけど。普及したというならWindows 2000からか
(それでも内部でUnicodeだろうがShift-JISがデフォのようだけど)
Windows 9x 前(もちろん 3.1も)までは限定的なUnicode文字列操作ライブラリがあったとかかな
589:デフォルトの名無しさん
20/07/02 15:28:28.91 9cYvmHwP.net
>>564
> 日本語に限っては、システムエンコーディングがUTF-8対応になったのはつい最近、当然それ以前はShift-JIS
> てとこかな、ググったとこでは
日本語がおかしい。知らないなら適当なこと書くなよ
> システム内部でUnicode対応していようが、Shift-JIS APIしか「使えない」んだったら
人の問題を持ち出すな。
無能が使えないからってなんなんだ
> (それでも内部でUnicodeだろうがShift-JISがデフォのようだけど)
根拠は?日本語以外の国があるのしらんの?w
590:デフォルトの名無しさん
20/07/02 16:07:07.26 ACoXsYjy.net
Windows UTF-8 ベータ
知らないのはどっちかなとしか思えないw
591:デフォルトの名無しさん
20/07/02 16:13:26.48 ACoXsYjy.net
ああ、
システムエンコーディングがUTF-8対応になったのはつい最近、日本語だとそれ以前はシステムエンコーディングはShift-JIS
だよ。すまんなw
592:デフォルトの名無しさん
20/07/02 21:31:15 9cYvmHwP.net
アホだな。
それはUnicodeに対応してないアプリ用のエンコーディングに
UTF-8が使えるようになったのが最近なだけだろ
システムエンコーディングが9x用アプリのための設定のことだって知らないんだろうな
593:デフォルトの名無しさん
20/07/02 22:29:06.37 SkSFT8E6.net
OSでいくらutf8に対応しようが末尾AのAPI使ったアプリはsjisの入出力前提で書かれてるんだし
対応しようとすれば文字列周りは全部作り直しだよ
VBAやVBScriptとかのWSHも同じ問題を抱えてる
Windowsのutf8完全移行なんて10年後すら怪しい
594:デフォルトの名無しさん
20/07/02 23:58:17.21 9cYvmHwP.net
だからそれはアプリの問題じゃん
Windowsの標準コマンドはUnicode前提(対応)で書かれている。
PowerShell等から利用するUnicode前提
WSLもUnicode(透過的に変換されるUTF-8)
VBAやVBScriptとかのWSHも同じ問題を抱えてるというが
問題があるのはそれとバッチファイルぐらいでしょ。
今は殆ど使われてない
595:デフォルトの名無しさん
20/07/03 10:48:21.18 D1jLBB9V.net
今は殆ど使われてない[要出典]
596:デフォルトの名無しさん
20/07/03 13:31:14.36 adDL+CTN.net
Windowsを使うな(暴論)
597:デフォルトの名無しさん
20/07/03 22:08:43.15 pyXUrnYQ.net
エディタが対応した時点で932とか捨てたわ
変換する必要すらない(更新予定のない)古いメモ以外に残っていない
21世紀も20年目に入ってるというのにまだそんなの使ってる自体遅れいるのか
598:デフォルトの名無しさん
20/07/03 22:26:00 uIgOlo/V.net
俺がcp932を捨てたのいつだっけな?
Windowsになってからlzhを捨ててzipにした。
日本語が含まれる可能性がある個人用のファイル圧縮に
Unicodeを使う7zを使うようになったのは、うーん?2000年頃かなぁ
9x系に見切りをつけて(動かなければソフトの方を諦める)Windows 2000にした頃には
ファイルはどうしても無理な場合を除いてUTF-8を使うようにしていたし
cp932を使っていた時代は、Linuxも
599:EUC-JPだったし大変だったね LinuxでEUC-JPからUTF-8に変わった時には、WindowsもUTF-8を使うようにした
600:デフォルトの名無しさん
20/07/03 23:44:56.51 9C03Lp22.net
文字コードとしてのcp932と
システムロケールとしてのcp932をごっちゃにしてるやつが多すぎる
前者は単なる文字コードだから、個人レベルでどうにでもなる
長いことWindowsでutf-8を使ってると言う場合はこれに当たる
後者は現在のwin10でもバリバリの現役で、utf-8は1803から追加されたものの、未だベータ扱い
一部の古いソフトだと不具合がでるので、そう簡単な話ではない
たとえば、このレスを書くために開いているJane Style
601:デフォルトの名無しさん
20/07/03 23:59:49.05 uIgOlo/V.net
システムロケールはOSではなくてソフトの問題なんだよな
Windows自体はシステムロケールの設定に依存していない
なぜならすべてUnicode(UTF-16)で処理してるから
(もちろん互換性のための処理として一部例外はあるだろうが)
602:デフォルトの名無しさん
20/07/04 00:30:48.50 1qYUKBUR.net
ソフト側でロケールを理解できなかったらダメだからねぇ
そういえば、Linuxもutf-8への移行期(Fedora Core 1が最初だっけ?)に、
それまでのRed Hat 9で問題のなかったeuc-jp前提のソフトがダメダメだった
まぁシェルスクリプトは問題なかったはず
603:デフォルトの名無しさん
20/07/04 05:09:47 ve9MtcL4.net
Windowsの場合Unicodeで作ってれば
システムロケールなんて関係ないよ
システムロケールを理解する必要があるのは
Unicode(UTF-16)非対応アプリの話
システムロケールと使用する言語(表示する言語)は別だからね
604:デフォルトの名無しさん
20/07/05 00:52:27.71 m0wz7oid.net
メモ帳の保存形式にあるUnicodeとかいう多重トラップ嫌い
605:デフォルトの名無しさん
20/07/13 19:16:41.40 Xa4f7njE.net
Austinで大規模なファイル更新があって,
お,何か重要な局面を迎えたのかな?と期待して報告書を読んだら,
全文書に存在する"POSIX.1-201x"を"POSIX.1-202x"に書き換える作業だったていうオチ。
606:デフォルトの名無しさん
20/07/15 10:35:51.78 GO+Zaox3.net
組み込み系のash環境です。
以下のコードは、外部テキストファイル(shift-jis)をwhileで1行ずつ読み込んで、
シリアルポートの/dev/ttyUSB0へ1行の内容をそのまま送信する処理の一部です。
ファイルの中に日本語の0x5cのバックスラッシュがあると、文字化けしてしまいます。
0x5c混在のサンプルとして「表示」の漢字が正常に送れるかの試験コードを作りました。
以下のスクリプトの文字コードはshiftJISで保存し実行しました。
text=ダメ文字表示テスト
filtered_text=`echo $text | sed -e 's/\\/\\\\/g'`
echo -e "ORG text $text"
echo -e "filtered_text $filtered_text"
echo -e "$filtered_text" > /dev/ttyUSB0
結果
sed: unmatched '/'
ORG text ダメ文字侮ヲテスト
filtered_text
やりたいこと
シェルスクリプト内の変数に格納して、/dev/ttyUSB0へ「ダメ文字表示テスト」とそのまま送信したいです。
1行ずつ送信する理由は、たまに行間で制御コードを混ぜる必要があるためです。
sedの行が肝になると思い、作例を1日探しましたが、探し方が下手で見つけられませんでした。
sed以外のコマンドでも使えるコマンドがあれば何でもいいです。
nkfは無しでした。iconvはありましたがShiftjisのコードが含まれていませんでした。
そもそも最終的に送信するデータがshiftjisなので、これらは関係ないと気づきました。
どのような書き方でできるか、お知恵をいただけないでしょうか。
607:デフォルトの名無しさん
20/07/15 11:54:50.30 IqfNcqeZ.net
ダメ文字は、数十年前
608:の話w
609:デフォルトの名無しさん
20/07/15 12:02:36.35 gwK3CNky.net
>>582
> 以下のスクリプトの文字コードはshiftJISで保存し実行しました。
それは絶対ダメ
ASCIIと互換性がない文字コードには対応してないのが普通
610:デフォルトの名無しさん
20/07/15 12:03:29.33 gwK3CNky.net
>>582
> 以下のコードは、外部テキストファイル(shift-jis)をwhileで1行ずつ読み込んで、
同様に対応してないのが普通
611:デフォルトの名無しさん
20/07/15 12:04:14.63 gwK3CNky.net
いい加減文字コードはUTF-8に一括変換してから
処理して戻すってことを覚えたほうがいい
612:デフォルトの名無しさん
20/07/15 12:07:30 gwK3CNky.net
>>582
echoは使うなprintfを使え
613:デフォルトの名無しさん
20/07/15 12:09:01 gwK3CNky.net
> 1行ずつ送信する理由は、たまに行間で制御コードを混ぜる必要があるためです。
意味がわからん。制御コード1文字が二行に分かれたりでもするんか?
614:デフォルトの名無しさん
20/07/15 13:17:28.61 4eO2mC8f.net
>>582
とりあえずシングルクォートは要るんじゃないの?
text='ダメ文字表示テスト'
615:デフォルトの名無しさん
20/07/17 17:54:07.38 pKRyHByg.net
>>582
>sed: unmatched '/'
SJIS云々の前にsedのコマンドがちゃんと認識されてないじゃん。
とりあえず、バックスラッシュの数を変えたり``じゃなくて$()を使ってみたらどう?
616:デフォルトの名無しさん
20/07/18 06:32:49.36 belUdedc.net
ひょっとしてSJIS完全対応のテキストエディタってLinuxには存在しない?
昔mousepadで盛大に化けた覚えが
617:デフォルトの名無しさん
20/07/18 07:03:52.09 6UJBCs7F.net
Emacs
618:デフォルトの名無しさん
20/07/18 10:26:12 PyiwbgQS.net
Vim
619:デフォルトの名無しさん
20/07/18 10:38:54.42 W7WHirLG.net
vscode
620:デフォルトの名無しさん
20/07/18 11:38:05.10 PyiwbgQS.net
バカな投稿をすると釣られた人間が正しい知識を教えてくれるメソッド
よかったな,>>591!
621:デフォルトの名無しさん
20/07/18 11:44:04 fwbEJCvA.net
つまりvscodeが正しいと?
622:デフォルトの名無しさん
20/07/18 12:39:31.97 PyiwbgQS.net
俺のスレ読んでないの?w
623:デフォルトの名無しさん
20/07/18 13:28:14.79 fwbEJCvA.net
お前のレス?釣られた人間が正しい知識を教えてくれるんでしょう?
それ以外になんかあるの?
624:デフォルトの名無しさん
20/07/18 13:48:08.58 W7WHirLG.net
エディタも使いこなせないならwinのメモ帳でも使いなよ。sjis対応だよ
625:デフォルトの名無しさん
20/07/19 08:53:42.63 b8gde26L.net
お前いつも壁と話してんな
626:デフォルトの名無しさん
20/07/19 10:23:03.44 HNDAT4gV.net
壁だと思ってるのはお前だけで、実は人間なんだぜ(ホラー風)
627:デフォルトの名無しさん
20/07/19 11:15:59.84 W3hSYpRn.net
ぬりかべ「かべっ!?」
628:デフォルトの名無しさん
20/07/27 19:01:06.79 prTniRCc.net
manコマンドはPOSIXに取り入れられそうなのに
その表示に関わるroffコマンドは影も形もないって、
なんつーか意味あんのかそれって思う。
629:デフォルトの名無しさん
20/07/27 20:34:03 Sw4i8xv6.net
>>603
roff 使わなくても cat1 とか cat8 に成形済みテキスト置いておくだけで man
は動くんだから、別に roff なくても良いといえばいいとか、そんな理屈なのかも。
630:デフォルトの名無しさん
20/07/27 20:48:14.37 9y96d1KX.net
manをPOSIXに取り入れるぐらいなら
HTMLビューワーをPOSIXに取り入れたほうが良い
JavaScriptとCSSに対応させる必要はないからさ
631:デフォルトの名無しさん
20/07/27 20:50:03.70 9y96d1KX.net
curlをPOSIXに入れればいいのに
フル機能じゃなくていいけどREST API叩けるぐらい
632:デフォルトの名無しさん
20/07/27 21:12:03.12 vTLRE8Va.net
>>603
おお、するどい。
でもmanが入ってないというのはどう言う意味? POSIXとSUSの意味の違いにこだわる?
で実際manの記述を見ると文章の整形とかそれをどう作るとかは書いてないので、
そういうレベルのものは規定しないという態度なのかも。
あと事実上GNU roffが標準だと思うが、さすがにそれを規格には入れられないのかも。
かといって今更大昔のroffに制限するのもなあと。
しかし最近GNUで検索するとKingの方がヒットしやすくてうざいw
633:デフォルトの名無しさん
20/07/27 21:16:04.4
634:5 ID:vTLRE8Va.net
635:デフォルトの名無しさん
20/07/28 08:42:48.22 UlETHBDV.net
こんなのか?
URLリンク(www.e-hon.ne.jp)
まだ役に立ってるよ。俺が持ってるのは 20.3 だけど。
636:デフォルトの名無しさん
20/07/28 13:13:59.11 R16GmJU5.net
質問。
次のような行からいずれかのvalueをきれいに削除するにはどうすれば?
name=value0,value1,value2,value3
たとえば次のコマンドだと、value1を削除できるものの、先頭か末尾か連続かのカンマが残ってしまう。。。
sed 's/^(name=.*)value1(.*)$/¥1¥2/'
残ったカンマを後で処理したらいいんだけど、そもそも一発でうまくやることができるんでは?という気がどうしても。
637:デフォルトの名無しさん
20/07/28 13:23:54.46 Mb4DOiRz.net
^(name=.*)�bvalue1,?(.*)$
こうかな
638:デフォルトの名無しさん
20/07/28 13:24:17.04 Mb4DOiRz.net
文字化けてるとこは円記号な
639:デフォルトの名無しさん
20/07/28 13:53:56.25 DVrEteyf.net
King Gnu?
どっかで聞いたことあるようなないような▪▪▪
640:デフォルトの名無しさん
20/07/28 14:07:36.32 R16GmJU5.net
>>611
value3の場合、末尾にカンマが残るよね?
また、value0なら先頭に残る。
どれでも一発できれいに削除できないかな?
641:デフォルトの名無しさん
20/07/28 14:08:46.03 3p32kQjL.net
残らないが?
642:デフォルトの名無しさん
20/07/28 14:25:35.27 R16GmJU5.net
残るが。
value3直前のカンマが¥1に含まれるので。
643:デフォルトの名無しさん
20/07/28 23:58:59.24 2KWkEgO3.net
>>610
>name=value0,value1,value2,value3
頭を柔らかくして、
最初に、この末尾に、カンマを追加すれば、処理しやすい形式になる
name=value0,value1,value2,value3,
644:デフォルトの名無しさん
20/07/29 00:10:05.86 bLm2KFbe.net
sed縛りなの?
後方参照する必要ないんじゃない?
value[0-2] については冗長だけど、以下の形式なら全部同じようにできるかと。
'?'の正規表現って、sedだとGNU sed とかだとつかえるのかな?
'?'はウチでは使えない。
echo 'name=value0,value1,value2,value3' | sed -e 's/value0,*//' -e 's/,$//'
echo 'name=value0,value1,value2,value3' | sed -e 's/value1,*//' -e 's/,$//'
echo 'name=value0,value1,value2,value3' | sed -e 's/value2,*//' -e 's/,$//'
echo 'name=value0,value1,value2,value3' | sed -e 's/value3,*//' -e 's/,$//'
645:デフォルトの名無しさん
20/07/29 03:25:12 ZD2Ud5DP.net
>>617
Perlとかならそうするが、sedだとなかなか?
sedはあんまり使わないので、そうしたくてもよくわからない。。。
>>618
sed縛りではないけど、Linux最小インストールでも対応したいので、sedくらいしか?
ほかに使えるならそれも可。
後方参照してるのは、「name=」で始まる行だけに限定したいから。
それ以外の行はそのままで。
「?」が使えない正規表現があるの?
POSIXに含まれてなかったっけ?
ちなみに現在はこうしてたっけかな?
細かいところはちょっと違うかも。
sed -r 's/^(name=.*)value1,?(.*)$/¥1¥2/;s/^(name=.*),+$/¥1/' -i file.txt
なんかくどくて、もっとさっぱり書けるやろと。。。
646:デフォルトの名無しさん
20/07/29 05:18:27.85 W2ZwK0DF.net
Ruby で作った
text = <<"EOT"
a
name=value0,value1,value2,value3
x
EOT
word = "value2,"
text.each_line do | line | # 1行ずつ処理する
# 先頭が、name= 以外は処理しない
next unless line.start_with? "name="
line.chomp! # 末尾の改行を削除する
line += "," # 処理しやすいように一旦、末尾にカンマを付ける
line.slice! word # 取り除く
line.slice! -1 # 末尾のカンマを取り除く
puts line #=> name=value0,value1,value3
end
647:デフォルトの名無しさん
20/07/29 06:28:49.20 Fq72t
648:fsf.net
649:デフォルトの名無しさん
20/07/29 07:17:15.52 SoSaYlfN.net
for((aa=-1;aa<4;aa++)); do echo name=value0,value1,value2,value3 |sed -e"/^name=/{s/$/,/; s/value${aa},//; s/,$//;}"; done
650:618
20/07/29 11:42:17.47 bLm2KFbe.net
>>622
完全に同意。個人的には {} 使わないで -e で並べたい派だけど。
*を使うより厳密に置換できてよいと思う。
619には以下の書き方のほうが分かりやすそう。
sed -e '/^name=/{s/$/,/; s/value0,//; s/,$//;}'
>>619
sedの正規表現では '?' 使えないはず。
GNU sed でもオプション使わないと通らないのが確認できた。
できれば -E を使ってほしいかな。個人的には。
-E, -r, --regexp-extended
use extended regular expressions in the script
(for portability use POSIX -E).
651:デフォルトの名無しさん
20/07/29 11:58:07 10XNhQ52.net
そうやって、外部コマンドをあれこれ駆使して
どうにかして簡単に書ける方法はないか?に
無駄な時間使ってるのを見るとアホやなぁって思う
一般的なやり方でできないなら諦めろよ
そのコマンドを使うのが間違ってるんだ
652:デフォルトの名無しさん
20/07/29 12:32:30.11 ZD2Ud5DP.net
>>622
なるほど。
sコマンドで全行置換することしか頭になかった。。。
パターンマッチで行を特定してから、複数の置換を{}でまとめて行えばいいのか。
なんかsedの要領がわかった気がするぞ。
どうもありがとう。
>>620
Rubyなら、split()とjoin()を使ったらもっとさっぱりにできそう。
653:デフォルトの名無しさん
20/07/29 12:44:55.15 ZD2Ud5DP.net
>>623
いや、>>622でちゃんとわかったで?
# ちょっとかんがえたけど。
正規表現の「?」は確認するとたしかにダメだった。
-Eは、「¥bvalue」としたい都合でつけてたから、あんまり意識してなかった。
と思ったら、こっちは-Eがなくてもよかったのか。
なんかもうメチャクチャだなー。w
654:デフォルトの名無しさん
20/07/29 13:19:38.86 E/WNSRes.net
データがカンマを含む場合はどうしますか?
name1=v0,"v,,1",v2,,,vvv,unko,
name2=,sss,"hdj,du,n",,ss,,,,kkkk
655:デフォルトの名無しさん
20/07/29 15:37:47.77 iTLEUVw7.net
特定の行で区切った塊ごとで処理したいんだけどいい方法ない?
例えばこんなのだったら====で区切って
abc
def
==== 1
ghi
jkl
==== 2
mno
pqr
abc~def、ghi~jkl、mno~pqrという3つの塊をそれぞれ処理したい。
それと ghi~jklという塊を処理している時は1ですよ。という数字も知りたい
(最初の塊の時は数字なし)
656:デフォルトの名無しさん
20/07/30 06:16:08.96 ixil7w/z.net
>>628
cat |sed -ne "/^===/! {H;}; $ b ll; /^=/ {:ll; s/=//g; x; s/\n/ /g; p;}" << EOL
abc
def
==== 1
ghi
jkl
==== 2
mno
pqr
EOL
abc def
1 ghi jkl
2 mno pqr
657:デフォルトの名無しさん
20/07/30 06:42:42.05 oWxKF5YB.net
>>629
条件を忘れましたが、画面に出力するのではなく
任意の処理をしたいのです。
つまり
foo() {
# $1 = 番号
# $2 = 塊
}
のようなことがしたいのです。
658:デフォルトの名無しさん
20/07/30 06:43:43.55 oWxKF5YB.net
あと塊から改行を取り除いてはいけません
659:デフォルトの名無しさん
20/07/30 14:54:43 Ws4Sjpc9.net
$!をリセットす
660:る方法はないですかね? 空とかunsetとか0とか
661:デフォルトの名無しさん
20/07/30 15:15:25.11 l+t/gnGC.net
Perl 使うと楽だが、シェルスクリプトで、か・・・
662:デフォルトの名無しさん
20/07/31 00:34:30.45 h2BvMEZJ.net
Ruby なら、
def f( num, line )
puts num, line
end
# num は、inject の蓄積変数。0 は初期値
File.foreach( "input.txt" ).inject( 0 ) do |num, line|
if line.start_with? "==== " # 先頭が、これなら
line.chomp! # 末尾の改行を削除する
num = line[ 5..-1 ].to_i # 数字の部分を取り出して、整数にする
next num
end
f( num, line )
num
end
出力
0
abc
0
def
1
ghi
1
jkl
2
mno
2
pqr
663:デフォルトの名無しさん
20/07/31 01:26:11.97 1vLgXRtq.net
>>630
Bashなら、プロセス置換(process substitution)でできるのでは。
<(echo;最初のデリミタ行までを抽出するコマンドライン)
<(echo 1;最初から次のデリミタ行までを抽出するコマンドライン)
<(echo 2;最後のデリミタ行からを抽出するコマンドライン)
としたら、先頭行が番号、それ以降がテキスト行として読み込める。
個人的には、さすがここまでのレベルならPerlとかでやったほうが。
664:デフォルトの名無しさん
20/07/31 19:26:43.51 qTuk7lt4.net
bashの#!でのオプションについて質問。
先頭行を次のようにすると、「invalid option name」エラーになります。
#!/usr/bin/bash -o pipefail
...
しかし、コマンドラインに同じように書くとエラーになりません。
/usr/bin/bash -o pipefail -c '...'
どうして?
-eならどっちも問題ないので、#!行のオプションの解釈になにか秘密があるんだろうけど。
665:デフォルトの名無しさん
20/07/31 20:01:20.64 j/9/9lyu.net
>>636
MacOSやFreeBSDだと上手くいく。
原因はLinuxのexecl()関数が
「/usr/bin/bash」と「-o pipefail」という
二つの引数を実行しているせい。
とうぜん「o pipefail」というオプションはないので,怒られる。
666:デフォルトの名無しさん
20/07/31 20:03:04.24 j/9/9lyu.net
さらに言うと,
シバンはPOSIXが「実装ごとに挙動がバラバラなんで俺はこの動作を規定しません」
って公言するくらい,各種OSごとに扱われかたが違う。
今調べられないけど,古いAIXとかだと
「!/usr/bin/bash -o pipefail」とかいうコマンドを探しにいってエラー吐いてた記憶がある。
667:デフォルトの名無しさん
20/07/31 20:39:05.80 k/mzlDiC.net
>>636
/usr/bin/bash -o pipefail ではなく
/usr/bin/bash "-o pipefail" を実行している
まあ素直に
#!/bin/bash
set -o pipefail
って書けってことだな
668:デフォルトの名無しさん
20/07/31 21:40:13 j/9/9lyu.net
もう書いたんだが…
669:デフォルトの名無しさん
20/07/31 21:44:42 qTuk7lt4.net
>>637
>>639
どうもありがとう。
要するにLinuxの不具合みたいなもんだけど、しかし「仕様」ってことか。。。
AIXかは知らないけど、シバンのトラブルはたしかに昔、Perlのドキュメントかなにかで見た気もする。
今でもあるとは。
ちなみに最終的にはこうしといた。
#!/usr/bin/bash -euC
set -o pipefail
...
670:デフォルトの名無しさん
20/07/31 21:56:20.95 k/mzlDiC.net
/usr/bin/bashにbashがあるとは限らない
というか普通無い
671:デフォルトの名無しさん
20/07/31 22:30:39.13 j/9/9lyu.net
>>642
Bashの位置に依存しない為には
#!/usr/bin/env bash
↑こうする。
しかし,envが/usr/bin/envにあるかどうかも分からない(以後無限ループ)
672:デフォルトの名無しさん
20/07/31 22:35:57.38 h2BvMEZJ.net
普通は、/bin/bash
じゃないの?
673:デフォルトの名無しさん
20/07/31 22:55:43.76 qTuk7lt4.net
>>642
ないのは見たことがない。
たとえばどんな環境?
>>644
HFSかRHELのドキュメントかなにかで、/binはシングルユーザー用、/usr/binはマルチユーザー用となってたような。
さらに環境によっては/bin→
674:/usr/binのシンボリックリンクでさえあるようなので、わりきって区別せずに/usr/binだけを使うことに決めた。
675:デフォルトの名無しさん
20/07/31 23:03:07.55 w9lTjcUH.net
$ lsb_release -d
Description: Ubuntu 20.04.1 LTS
$ ls -1 /bin/bash
/bin/bash
$ ls -1 /usr/bin/bash
ls: cannot access '/usr/bin/bash': No such file or directory
676:デフォルトの名無しさん
20/07/31 23:31:35.93 BwwodwaD.net
>>645
Linuxの場合/usr/binにbashがあるのは/bin -> /usr/binになっている環境ぐらい。それ以外はほぼ間違いなく/binにある。元々シングルユーザーモード用の/binになかったら、シングルユーザーモードでシェルが使えないでしょ。
最近は/binと/usr/binを統合する動きが進んでいるから将来はどっちでも良くなるかもしれないし、あるいは/binがなくなるかもしれないけど、今はまだ従来の環境も普通にあるから/bin/bashがいい。その為にシムリンクを張っているわけなので。
UbuntuやDebianは、今インストールすると統合されるけど、従来の環境からアップデートした場合は統合されない。
あとGentooとかは今クリーンインストールしても統合されない。
677:デフォルトの名無しさん
20/08/01 01:21:21.09 6XTg5Iao.net
>>647
シングルユーザー環境はまったく想定外なので。。。
ファイルパスをあわせても、実際の具体的な環境は把握できてないし、どうせ動作確認もしないから、きっぱりわりきることにしたのだ。
binの統合の話は、RHEL8のドキュメントで見た気がするけど、だったらもうとっととのっとこう、と思ったのもある。
うちのメインはCentOSだし、そうなってない環境を使うことになったら自分でシンボリックリンクを追加したらええんやろ、ということで。
678:デフォルトの名無しさん
20/08/01 08:14:01 6JQgXAfu.net
又聞きで悪いが,Oracleかなにかだと,/usr/bin/にはGNU系の製品が入ってなかったとか。
/export/以下にあるとかなんとか。
679:デフォルトの名無しさん
20/08/01 08:30:02.46 2HCIDb75.net
/opt/bin とかに入ってるのもあったなぁ
680:649
20/08/01 10:05:25.94 6JQgXAfu.net
>>650
あー。これで思い出した。
/opt/bin/だわ。
/export/は利用者のホームディレクトリとかがある所だわ。
Bashの場所とは関係ない話になるけど,
昔$HOME変数とか使わずに/home/***以下にあるやろって決め打ちしてたら
Solarisではまさかの/export/home/***にあるっていう罠に引っ掛かったw
681:デフォルトの名無しさん
20/08/01 13:49:06.35 U7vGE7b3.net
何十年経ってもディレクトリが分類できる未来はないんやな
682:デフォルトの名無しさん
20/08/01 17:25:34.94 WzMhf7ZH.net
>>652
OS作る時にOSの仕様として組み込んでしまうぐらいしか方法無いと思う。ちょっとでも自由があると必ずそこから崩れる。
683:デフォルトの名無しさん
20/08/01 23:28:16.58 huzWWnKB.net
10MBぐらいのテキストファイルでさ
指定したバイト目から~バイトの範囲を取得っていうのを
やるととしたらどういう方法が一番高速だろうか?
bashismなし。外部コマンドは呼び出してもいいけど遅いな
684:デフォルトの名無しさん
20/08/02 00:54:32 hIQzyyzC.net
Perlでワンライナーが速そう。w
685:デフォルトの名無しさん
20/08/02 00:55:21 KvZo8Zjs.net
でもPerlを呼び出すコストがかかるでしょ?
686:デフォルトの名無しさん
20/08/02 03:03:58.88 hIQzyyzC.net
じゃあ、全文をPerlに書き直そう。w
いっそCで?
マジな話、ファイルを直に開いてseekできるPerlならトータル黒字なんでは。
知らんけど。
687:デフォルトの名無しさん
20/08/02 08:34:06.01 fjyVy3s+.net
dd, o
688:d, head/tail コンパイル済みのCのコードのほうが速いやろ
689:デフォルトの名無しさん
20/08/02 09:26:03.25 mglN/rTr.net
>>654
dd一択。
690:デフォルトの名無しさん
20/08/02 12:16:22.41 pZSLu0WP.net
そもそも設定が/etc/に雑に放り込まれてる時点でな
個人設定だって~/直下だったり~/.dirだったり~/.config/.dirだったりてんでバラバラだし
691:デフォルトの名無しさん
20/08/02 14:14:46.24 hIQzyyzC.net
>>658
tail|headは遅いやろ。
とくに大ファイルの前の方を抽出する場合には。
tailは後の不要な部分も全部読んでまうので、ファイルが大きいとかなり遅い。
692:デフォルトの名無しさん
20/08/02 14:18:23.50 hIQzyyzC.net
いや、head $(())|tailとすればマシなのか。
元コメのPerl起動時間さえ気にする用途にはあわんかもだけど。
693:デフォルトの名無しさん
20/08/02 15:04:27.21 mglN/rTr.net
>>662
たぶんPerlの呼出しコストにいちゃもん付けてる>>656は
>>654とは別人。
あとheadやtailだと「バイト」単位では切出せない。
ところで head $(()) っていう技巧おもしろいね。初見だわ
694:デフォルトの名無しさん
20/08/02 15:44:30.48 hIQzyyzC.net
>>663
別人かもだけど、そういう気持ちは元コメから書いてあったから。。。
head/tailは、--bytesオプションがあるやろ?
算術式展開は、でもBash限定なんだっけ?
ただ、いずれにしてもddにしろheadにしろtailにしろ、スキップが読み捨てなのか直シークなのかで速度が違いそう?
695:デフォルトの名無しさん
20/08/02 19:23:27.16 mglN/rTr.net
>>664
算術展開はPOSIXで定義されてるから
最近のPOSIX準拠を謳うシェルなら必ず使える。
URLリンク(pubs.opengroup.org)