シェルスクリプト総合 ..
[2ch|▼Menu]
56:デフォルトの名無しさん
20/03/30 17:34:28 wadsBXpT.net
エイプリールフールはまだだぞ

57:デフォルトの名無しさん
20/04/02 14:38:12.64 BA8GpIv4.net
Windows 10, WSL, Ubuntu 18.04 に、Ruby のバージョンマネージャーのrbenv を、
rbenv-installer を使ってインストールしたのですが、
URLリンク(github.com)
これの34行目について、
rbenv="$(command -v rbenv ~/.rbenv/bin/rbenv | head -1)"
これを、bash スクリプト内に書いて、スクリプトを実行すると、
xxx="$(command -v rbenv)"
xxx は、~/.rbenv/bin/rbenv とパスが入り、
これを端末で直接実行すると、
xxx は、rbenv となって、パスが入らない!
bash スクリプト内に書いて、それを実行した時と、
端末に直接入力した時では、結果が異なってしまう!

58:デフォルトの名無しさん
20/04/02 14:41:15.78 o0fN+e0O.net
>>56
あのさ、シェルで変数Aに123って代入して
別のプログラム実行したら、変数Aに123が入ってなかった!
みたいな間抜けなレスは要らないから

59:デフォルトの名無しさん
20/04/02 19:04:30.73 mH0OQczo.net
>>56
command -V rbenv
type rbenv
してみ、端末で直接実行時に
最優先実行対象を返すんだからその結果で何もおかしなことはないよ

60:56
20/04/02 21:38:05 BA8GpIv4.net
端末で、command -V rbenv, type rbenv を入力したら、
両方とも、rbenv という関数が表示された!

でも、 which rbenv と入力すると、
~/.rbenv/bin/rbenv と、ちゃんとパスが返ってくるけど

rbenv ()
{
local command;
command="${1:-}";
if [ "$#" -gt 0 ]; then
shift;
fi;
case "$command" in
rehash | shell)
eval "$(rbenv "sh-$command" "$@")"
;;
*)
command rbenv "$command" "$@"
;;
esac
}

61:デフォルトの名無しさん
20/04/02 22:11:52 mH0OQczo.net
which -- locate a program file in the user's path

command - execute a simple command
-v
Write a string to standard output that indicates the pathname or command that will be used by the shell, in the current shell execution environment (see Shell Execution Environment), to invoke command_name, but do not invoke command_name
以下省略するが読め
URLリンク(pubs.opengroup.org)

62:デフォルトの名無しさん
20/04/03 12:01:03 liYJ7DEW.net
ちゃんとリンク,引用までしてあげて親切だなぁ。
黙ってNGすりゃいいのに。

63:デフォルトの名無しさん
20/04/04 12:25:48.39 teSfSC9d.net
URLリンク(pubs.opengroup.org)
ipcsコマンドとかのXSI通信系コマンドを使ったことある人いる?
どういう場面で使ったのか知りたい。

64:デフォルトの名無しさん
20/04/04 13:26:30.10 x+avwAnv.net
IPC使ったことがないとしか思えない。XSIに限らず他のIPCすらも
IPC使ったことがあるならそんなの聞かないだろう

65:デフォルトの名無しさん
20/04/05 08:45:21 UxA0hjaO.net
使ったことがないから聞いてるんだろうに使ったことがないとしか思えないとはとんちかな

66:デフォルトの名無しさん
20/04/05 13:50:07 TlWLT3Mj.net
無知だからしょうがないんだろうがとんちんかんすぎ
シェルスクリプトとは関係ない、IPC使う場合の場面に決まってるだろってことだよ

67:デフォルトの名無しさん
20/04/05 19:18:45.75 hACSBNMn.net
誰かawkの互換性についてまとめてる人いない?
どれだけの実装があって、POSIXにどれだけちゃんと準拠してるとのとか
awkはどのLinuxにも入ってるって前提でいいのか?とか

68:デフォルトの名無しさん
20/04/06 18:02:52 h+IdnJJv.net
まずは隗より始めよ

69:デフォルトの名無しさん
20/04/07 11:20:12 OVrvsyTh.net
脱ケージ活動 ワロタw
(ケージ=鳥かご、おり、捕虜収容所)
まあそうなるよね。シェルスクリプト(笑)

ハンズラボとユニケージのあゆみ
URLリンク(www.hands-lab.com)

突然ですが、ユニケージ開発手法というのものをご存知でしょうか?
→ 詳しくは弊社の以下記事にて説明しております。
ハンズラボが採用しているユニケージという謎テクノロジーについて 第1回

弊社でのユニケージの現在
そんなユニケージですが現在のハンズラボでは技術的負債としての認識が強いです。

ユニケージからの脱却、通称脱ケージ活動は現在社を上げた取り組みの一つです。
負債の解消に向けて、様々な取り組みを実施しています。

70:デフォルトの名無しさん
20/04/07 14:58:20.98 rrWnJIGn.net
>>62
共有メモリとかセマフォとかメッセージキューとかの確認で使ったことあるよ。そういうのを使うプログラムのデバッグ中とか動作確認でな。

71:デフォルトの名無しさん
20/04/07 16:39:21 6BPG1jDR.net
>>68
プレゼンテーションみてみ、主にはシェルスクリプトだからというのではないから
シェルスクリプトはど素人にとっつきやすいのか?

72:デフォルトの名無しさん
20/04/07 16:59:54.57 7MZHT+wD.net
>>70
>主にはシェルスクリプトだからというのではないから
は?

73:デフォルトの名無しさん
20/04/07 17:06:46.66 6BPG1jDR.net
プレゼンテーションみてみ「素人が作った」だから

74:デフォルトの名無しさん
20/04/07 17:21:07 6BPG1jDR.net
juniとかsm1,sm2,sm3,sm4,sm5(5までかな?w)、ハンズラボ内製かと思ったら、ユニケージ元が提供してるヤツかw
ダメすぎに見えるな見えるだろうな、他の言語メンテを考えて開発してるのから見たら

75:デフォルトの名無しさん
20/04/07 17:31:04 6BPG1jDR.net
いや、プレゼンテーションにある、sm2,sm4,sm5だけなのか
1,3が欠番、2/4/5にちょっとは深い意味があるのか?
他でも命名がある意味無茶苦茶だなあ、仕事として使おうとは全く思えない

76:デフォルトの名無しさん
20/04/07 18:06:03.96 OVrvsyTh.net
>>70
Windows以前はMS-DOSが使われていた。
GUIなんてものはなく、コマンドプロンプトと
バッチファイルを触るのがパソコンを使う第一歩だった
これはLinuxにも当てはまる。Linuxを使う第一歩は
シェルスクリプトを触ること。GUIだけならWindowsを使えばいい。
Linuxを使うという第一歩はシェルスクリプトを触ることになる。
その第一歩の知識だけで仕事をした結果。
シェルスクリプトが悪いのではなく
第一歩の知識だけで仕事をした結果
知識を得る努力をせずに、今の知識で努力した結果
結局の所知識不足なので何しても破綻する

77:デフォルトの名無しさん
20/04/07 18:07:43.92 7MZHT+wD.net
日本語不自由すぎやろw
言語関係なく組織の人的負債になるタイプ

78:デフォルトの名無しさん
20/04/07 18:14:36 6BPG1jDR.net
読めない自分を少しは疑ってみような

>>75
>Linuxを使う第一歩はシェルスクリプトを触ること
そんなこと言ってるからLinuxが普及しないんだよw

79:デフォルトの名無しさん
20/04/07 20:33:27 gCNEshtB.net
>>69
ありがとう。

80:デフォルトの名無しさん
20/04/07 22:56:47.46 OVrvsyTh.net
>>77
> そんなこと言ってるからLinuxが普及しないんだよw
そのとおりだと思うが?正確には俺が言ったから普及しないんじゃなくくて
Linuxがそういう状態であるから普及しない。俺はそのことを言っただけ。
俺が言うのをやめたところで、Linuxが改善されないと普及しないよw
更に言うならLinuxを普及させたければ、ソフトウェアするんじゃなくて
いい営業部隊を雇うことだよ。雇う金を出せないなら永遠に無理ってことだけどな。
オープンソースなんだから営業を雇う金なんて集まらないって言うけど、
そもそもオープンソースにしたのは誰かに言われたのではなく
自分で決めたんだろうから、文句言うなって話だがな

81:デフォルトの名無しさん
20/04/07 23:09:11.40 rrWnJIGn.net
LinuxはPCのデスクトップ環境では伸びなかったがその他では使われまくってるよな。
PCと似たような使われ方もするAndroidのベースOSがLinuxだし。もうこれだけでも恐ろしいぐらいの普及率だ。
その他薄型テレビだのネットワーク機器だのそこらじゅうで使われている。

82:デフォルトの名無しさん
20/04/07 23:09:41.77 5NuNjNr6.net
Linuxが普及しないのはオープンソースを言い訳に使うから。byチコ

83:デフォルトの名無しさん
20/04/07 23:33:03 OVrvsyTh.net
Linux(UNIX)のコマンドとバッチファイルのコマンドは
どちらもCLIだがスタイルがぜんぜん違う

例えば、echoを引数無しで実行すると
ECHO は <ON> です。と表示される。

もしバッチファイルのコマンドのスタイルが
Linux(UNIX)に混じったらとても使いづらくなるだろう

一貫性ある形で統一することは重要。Linux(UNIX)は
GUIでこの統一に失敗した。

84:デフォルトの名無しさん
20/04/08 02:12:11 IyPQ81Bn.net
じじいの知識自慢

85:デフォルトの名無しさん
20/04/08 02:25:50 WKxansXY.net
GUI環境を好みで選べるのが良いところじゃん
GNOME
KDE
Xfce
LXQT
MATE
等々

86:デフォルトの名無しさん
20/04/08 09:01:22.17 TEO49enz.net
良いところがあれば、世界で一位になれる。
これはマクドナルドに味で勝負した高級ハンバーガー店が
惨敗するまでの悲しいストーリーである。

87:デフォルトの名無しさん
20/04/08 09:40:49.64 RSqCZ6so.net
オープンソースって一般人からしたら負担だけどな
粗造乱造が基本だから目当ての物を探すのに苦労する
模倣のくせに機能不足だとか洗練されていない外観だとか心当たりあるだろ
何か意見すれば「自分で」で逃げるしさ
呆れられたいのか誇られたいのかはっきりしな
お仕着せのappleと無法地帯のLinuxと両極端なんだよ

88:デフォルトの名無しさん
20/04/08 09:52:21.83 /PQASvbd.net
意訳:俺の好みじゃない。Windowsがいちばん

89:デフォルトの名無しさん
20/04/08 09:58:42.93 gjFvYWAv.net
ただWindowsを使ってて知ってることが多いってだけだな
単にそれで基準がWindows
それ以上手がかかってもダメだし手がかけられないとダメ、
Windowsで知ったことの範囲でWindowsの手順でできなきゃダメってだけ

90:デフォルトの名無しさん
20/04/08 10:46:28 kH2GeAXz.net
Linuxと言うかオープンソース界隈でいやなのは
先駆者が先輩面したり初心者を馬鹿にして
さも自分がすごいんだと言いたげなところかなあ
これと対極をなすのがスマホとかなんだけど
知り合いの若いのにアプリの使い方聞いてみ?
親切に教えてくれるぞ

要するに俺はLinuxを知ってる!
オープンソースを知ってる!
でも誰も褒めてくれないから
新参者がきたら牢名主のように
小言を言い続けてやると思ってそうなところ

91:デフォルトの名無しさん
20/04/08 10:47:16 kH2GeAXz.net
まあ手に入れた数少ないスキルだからしゃーないか

92:デフォルトの名無しさん
20/04/08 12:06:02.73 +6aWDKKq.net
俺にLinuxや他のOSSを教えてくれた人はそんな人じゃなかったな。
懇切丁寧に教育してくれた。
寧ろ大学やらでWindowsやExcelの使い方を指導してた教員のほうが態度が酷かった。
まぁ,どういう人に恵まれるかで,その「教えた対象」の評価すら変わるってのは,ちょっと非論理的だけど,
かく言う俺も,多分上で話した教員のせいで,Microsoft製品を色眼鏡で見てしまうきらいがある。

93:デフォルトの名無しさん
20/04/08 13:15:43.23 oh4YVJIM.net
>>88
> ただWindowsを使ってて知ってることが多いってだけだな
だから営業部隊の話につながる。
使ってもらうにはどうしたらいいか?答えは宣伝だよ。
パソコン屋に置いてもらうネットやテレビで宣伝する。
いずれも金がかかる方法だ。だからオープンソースいう
選択をした時点で積んでいるんだよ。自分で自ら王手されに行った。
いや王手がだめって言ってるんじゃないよ。
相手(利用者)にとってはいい捕虜だから

94:デフォルトの名無しさん
20/04/08 13:57:03 247C/Fba.net
Linuxが普及してない世界線でシェルスクリプト書いてるやつもおるんやなw

95:デフォルトの名無しさん
20/04/08 14:19:48.18 5a3Kp3Hv.net
>>93
世界=俺の知っている世界、または
世界=俺の見たい世界
って奴がたまにいるからね

96:デフォルトの名無しさん
20/04/08 15:36:59.25 WKxansXY.net
変な位置で改行するやつ多いな
みんな同じ環境で見てると思ってるんだろうな

97:デフォルトの名無しさん
20/04/08 15:57:31 oh4YVJIM.net
同じ環境で見てるとは思ってないが、
最低横80文字(笑)ぐらいで見てると思ってる
スマホぐらいだろ?そのスマホで長い文字が読みづらいなら
それはサイトの仕様が悪いだけ

98:デフォルトの名無しさん
20/04/08 16:04:41 snKRM3SL.net
マックをLinuxに加えれば結構シェアが取れていると思うぞ。

99:デフォルトの名無しさん
20/04/08 16:10:53 oh4YVJIM.net
MacでLinux用バイナリがそのまま動かないなら、Linuxとは認められません

100:デフォルトの名無しさん
20/04/08 16:18:00 kuvoBLk0.net
なにを主張したいのか
なにを否定したいのか
シェルスクリプトと全然関係ないことには変わりなさそう

101:デフォルトの名無しさん
20/04/08 16:28:47 WKxansXY.net
サーバーOSシェアはLinuxがダントツだからな
WSLの環境作るのも楽になったしWindowsは単なるコンテナになった

102:デフォルトの名無しさん
20/04/08 17:31:57.45 1eDcIZ82.net
普通にwin上でbashです

103:デフォルトの名無しさん
20/04/08 17:35:44.13 oh4YVJIM.net
> Windowsは単なるコンテナになった
これは「すごいこと」という意味だよね?
Linuxも単なるコンテナになることが出来る。
コンテナになれるというのはモダンなOSの必須条件

104:デフォルトの名無しさん
20/04/08 18:41:56 q66UKRIK.net
無理やりなレス。自覚は無さそうだが

105:デフォルトの名無しさん
20/04/08 18:45:47 oh4YVJIM.net
単なるコンテナになったの意味がわからんだけだよw
クラウドで散々仮想マシンでLinuxが動いてるのに、
Windowsは仮想マシンで動かせばいいとか皮肉の意味で言うやつもいるし。

使いたいものだからこそ、仮想マシンやコンテナで使うわけで
むしろ逆に、Windowsさえ使えれば、ホストはなんでもいいということなんだが

106:デフォルトの名無しさん
20/04/08 18:54:28 WKxansXY.net
でっていう

107:デフォルトの名無しさん
20/04/08 19:17:03 +6aWDKKq.net
なんか事実とか関係なく,
「議論に勝てばいいや」の精神でレスしてる奴がいるな。

いや,もはや議論と呼ぶにも烏滸がましい,口喧嘩か。

いいかげんスレチな話題は収めようぜ?

108:デフォルトの名無しさん
20/04/08 19:29:33 oh4YVJIM.net
>>106
では言い出しっぺからどうぞ

109:デフォルトの名無しさん
20/04/08 19:32:17 +3Ip4bre.net
        ∧∧  ミ _ ドスッ
        (   ,,)┌─┴┴─┐
       /   つ.  終  了 │
     〜′ /´ └─┬┬─┘
      ∪ ∪      ││ _ε3
               ゛゛'゛'゛

110:デフォルトの名無しさん
20/04/10 00:47:25 na8GHWZ/.net
Apple「全部こちらが用意したものだけ使ってろ改造すんな」
Microsoft「OSだけ売るから自作なり出来合いなり好きにしろ」
Linux「OSはタダでやるからそれ以外は自分でやれ。改造してもこっち頼るな」
unixとは無縁だがあれの扱いも林檎とどっこいでいいんだよな?一般人は用ないし

111:デフォルトの名無しさん
20/04/10 06:21:29 4WnvV4mF.net
× Microsoft「OSだけ売るから、自作なり出来合いなり好きにしろ」
○ Microsoft「OSと開発環境、プラットフォームを提供するから、自作なり出来合いなり好きにしろ」

MSが提供してる開発環境・プラットフォーム
・Visual Studio
・Visual Studio Code
・Azure
・GitHub
・WSL
・Office(マクロ)
・SQL Server
・HyperV

112:デフォルトの名無しさん
20/04/10 09:07:06 Ixv/fgWK.net
small basicが入ってないぞ

113:デフォルトの名無しさん
20/04/10 10:23:40 ES+9souz.net
LinuxというかGNUが提供しているプラットフォーム・開発環境は
>>110
の数倍はありそう(下手すると数十倍?)。

その上で,「こっち頼るな,寄り集まって好きに改造しろ。」だからな。

114:デフォルトの名無しさん
20/04/10 11:04:17 4WnvV4mF.net
>>112
LinuxじゃなくてGNUだろ?
GNUのものはWindowsで何でも使えるようになったぞw

GNU「開発ツールはタダでやるから勝手に使え。OSはまだできてない。」


あとAzureに相当する開発プラットフォームはAppleもLinuxも実現できてない
やってるのはAmazonとGoogleであってLinuxではない
そう考えるとクラウドもOSの機能の一つを完全に実現してるのは
Microsoftだけなんだよな

115:デフォルトの名無しさん
20/04/10 13:07:14.50 CpDDWrVd.net
MS信者がキモい

116:デフォルトの名無しさん
20/04/10 14:26:12.32 5gPd6BaW.net
Linuxって企業だったんだwww

117:デフォルトの名無しさん
20/04/10 14:46:54.18 ES+9souz.net
めっちゃ突っ掛かってきてワロタ

118:デフォルトの名無しさん
20/04/10 16:00:20.83 nukGJGZx.net
>>115
企業じゃないよ。だから金がなくてLinux単体では
使い物にならない。

119:デフォルトの名無しさん
20/04/10 16:04:50.67 vdvhEun4.net
Linux愛好者?って偏屈だよね
俺Linux知ってるけどお前に教えないワラって感じで性格悪い
そのあたりでLinuxが浸透しない原因
そして今日もMSの株価時価総額1位

120:デフォルトの名無しさん
20/04/10 16:26:01.02 pLdRSiLY.net
時価総額の世界第一は違うぞ
第3位のAppleの時価総額はさほど第2位のMicrosoftとさほど変わらんが同等に見てるってことだな、お前は

121:デフォルトの名無しさん
20/04/10 16:32:36.01 ix9xeN7W.net
マイクロソフト信者やパソコンの大先生のよた話はもういいよ

122:デフォルトの名無しさん
20/04/10 16:50:45.63 5/MlN8IX.net
時価総額世界一はマイクロソフトだぞ?
ずっと前に奪還したって聞いたんだがな
URLリンク(stocks.finance.yahoo.co.jp)
1〜50件 / 6370件中最終更新日時:2020年4月10日7時40分
順位 名称・ティッカー・市場 取引値 前日比・前日差 時価総額 掲示板
1 マイクロソフト [MSFT] - NASDAQ 165.14 (04/09 17:20) +0.01% (+0.01) 1,256,062,603千
2 アップル [AAPL] - NASDAQ 267.99 (04/09 17:20) +0.72% (+1.92) 1,172,584,885千
3 アマゾン・ドット・コム [AMZN] - NASDAQ 2042.76 (04/09 17:20) -0.01% (-0.24) 1,016,907,263千

123:デフォルトの名無しさん
20/04/10 17:11:16 ix9xeN7W.net
奪還とか信者きめえ。今の世界第一はサウジアラムコな
そんな会社関係ないIT関係でとか言いそうだが
アホみたく無知を晒すなよ、それもキリリっとかでw

124:デフォルトの名無しさん
20/04/10 17:11:29 QxjVipyN.net
スレ違い

125:デフォルトの名無しさん
20/04/10 18:29:49 5gPd6BaW.net
>>117
アスペかよwww

126:デフォルトの名無しさん
20/04/11 10:25:05 md0SvLvZ.net
× Linuxは使いものにならない
○ Linuxを使いこなせない。

だいたい,シェルスクリプトに関して言えばLinuxなんかのUnixが圧倒的に有利なんだから,
少なくともこのスレでWindowsを讃えまくっても無駄骨だと思います(指摘)。

127:デフォルトの名無しさん
20/04/11 22:43:08.40 7reDkQuk.net
自炊できない自分を棚にあげて親のメシマズをあげつらう僕ちゃん

128:デフォルトの名無しさん
20/04/11 23:13:07.29 OL9J6aZ0.net
厳密にいうとシェルスクリプトではないのですが、
wsl や cygwin で
$ mv 'テスト' test
とすると
test\r
というファイルができてしまいます。
test
というファイルにするにはどうすればいいですか?

129:デフォルトの名無しさん
20/04/12 10:26:07 3CnLqbrV.net
>>127
これマジ?

Cygwinは試してないけどWSL (Ubuntu)
ではそんな現象起きないぞ。

130:デフォルトの名無しさん
20/04/12 10:44:52 6aAn44p0.net
マジなわけねーだろw

131:デフォルトの名無しさん
20/04/12 11:29:32 kH7j2wOo.net
ls で見ると

'test'$'\r'

というファイルができています

sed とか tr とかいろいろ試しているのですが、\rが取れ


132:ワせん。



133:デフォルトの名無しさん
20/04/12 11:55:26.80 qLm4HprE.net
Windowsだから改行がCRLFになってCRがファイル名として処理されたんだろうね
昔そうなった記憶があるようなないような
普通ならエラーになったような気がするんだけどね
試してないけど名前変えたいだけならGUIでログインしてファイルマネージャで修正できると思う
コマンドラインならESC押しながら補完したらコマンドで触れる有効なファイル名になった気がする

134:デフォルトの名無しさん
20/04/12 11:59:52 qLm4HprE.net
CRLFのCRが原因だろうけど
シェルスクリプトなら改行コード変換してみるとか
ターミナルならTeraTerm使うとかでしのいで
根本対処は後にした方がいいと思う
うちはcygwinの環境もうないしWSLも使わんわ
もっぱら仮想環境かラズパイ
昔仕事でcygwin使ってたころ
いざUnixやLinuxの実機に移したら
動かなくて痛い思いした覚えがある

135:デフォルトの名無しさん
20/04/12 12:03:30 KtYGSQjQ.net
stty igncr
mv $'test\r' test

Windows/MS-DOSなテキストファイル(CRLFが改行)に書いて実行したとか

136:デフォルトの名無しさん
20/04/12 12:13:43.08 KtYGSQjQ.net
ふつーーーーのTeminalアプリでは igncr にしちゃうと改行できなくなんのか
WindowsのCommand Promptからbash起動でも同じく改行できなくなんな
>>127は本当にインタラクティブでやったのか?

137:デフォルトの名無しさん
20/04/12 12:39:56.00 KtYGSQjQ.net
送り側(Terminalアプリ)の改行はCR、受け側はCRをLFに変換してなのね
stty のそこらあたりのデフォ(-inlcr -igncr icrnl)からは。WSLでも同じ
stty igncr するとリターンキー叩いても無視されて何もできなくなるが、リターンキーの代わりにControl-JでLF送ればいいだけなのね

138:127
20/04/12 13:16:51.20 kH7j2wOo.net
シェルスクリプトでやっています。
mv "テスト" test
stty igncr
mv '$test'\r' test
というファイルを作って
$ bash ,/file
とやると
cannot execute binary file: Exec format error
とでます。インタラクティブでやらないとできないんでしょうか?

139:デフォルトの名無しさん
20/04/12 13:32:38.13 MICQg9zq.net
そのシェルスクリプトの改行コードがCRLFになってるんじゃないですか、というのと
mv '$test'\r' test
ではなく
mv $'test\r' test
(シングルクオートの位置と数に注意)
$ bash ,/file
ではなく
$ bash ./file
or
$ bash file
で実行しましょう。

140:デフォルトの名無しさん
20/04/12 13:34:49.83 QH8CCQ6c.net
書き間違いなのかも知れないけど、そこは
$ bash ./test
なんじゃ?

141:デフォルトの名無しさん
20/04/12 13:57:36.00 KtYGSQjQ.net
bash ./test
ではないでしょ。ターゲットファイルがtestでスクリプトファイルじゃないんだから
>>137のとおり。>>136はわざとなのか?wなぜそうすると言うw
mv "テスト" test
をなぜ入れる。また、sttyはシェルスクリプトでは(ほとんど)関係ないよ
ちゃんと改行を選択できる(もしくはLFになる)エディタで書けばいいだけの話だし、
mv "テスト" test
だけで test になるだろう
すでにある 'test\r' を test にしたいなら、
mv $'test\r' test
とファイルに書いて実行すればいいだけだな

142:デフォルトの名無しさん
20/04/13 06:27:55.73 bwzJgTJt.net
POSIX準拠度を図るツールとか調べてるサイトないんかね?

143:デフォルトの名無しさん
20/04/14 01:35:34 JSjD3hsj.net
checkbashismとかは?

144:デフォルトの名無しさん
20/04/14 07:04:50.30 ji8PXwtq.net
>>141
あー、シェルスクリプトの準拠度じゃなくて
シェルの準拠度ね。シェルがどれだけ標準を満たした実装かってこと

145:デフォルトの名無しさん
20/04/14 09:49:58 r1rqFhB1.net
調べてどーすんの?

146:デフォルトの名無しさん
20/04/14 10:25:51 ji8PXwtq.net
そうすりゃ自分が間違ってるのかシェルにバグが有るのかわかる


147:だろ?



148:デフォルトの名無しさん
20/04/14 10:42:05.80 GtUt/+gx.net
調べたければ公式のtest suite入手すればいい
URLリンク(get.posixcertified.ieee.org)

149:デフォルトの名無しさん
20/04/16 01:24:21 sXaGgreP.net
ファイルが存在するなら上書き、しないなら新規作成ってtouchじゃなくてviでやるかんじでしょうか?

150:デフォルトの名無しさん
20/04/16 01:56:40.88 phPWx1q3.net
リダイレクトでappendすればいい
$ do_something >> output.txt

151:デフォルトの名無しさん
20/04/16 02:20:53.33 tywb42E3.net
bash なら、-e で、ファイルが存在すれば真
[ -e ファイル名 ]
逆に、ファイルが存在しない時に真
[ ! -e ファイル名 ]

152:デフォルトの名無しさん
20/04/16 09:20:05 pf1fo5EI.net
>>148
これだとうまくいかないことがある

153:デフォルトの名無しさん
20/04/16 11:59:50 TtBh+dOu.net
上書きって言ってるから、単純に

$ do_something > output.txt

で良いんじゃない?

154:デフォルトの名無しさん
20/04/16 12:07:49 DjP17ITj.net
>>150
普通にこれでいいな。

155:デフォルトの名無しさん
20/04/16 13:48:40 pf1fo5EI.net
リダイレクトでファイルを作れるけど
リダイレクトでファイルを削除ってできないんだよな
空にすることはできるけど

156:デフォルトの名無しさん
20/04/16 14:05:57.06 42Nlbk00.net
ファイルオープンとファイル作成は同居してるからな
削除は別物

157:デフォルトの名無しさん
20/04/16 14:19:23.91 pf1fo5EI.net
まあ分かるけど対象性がないと言うか
Aから出力したものをBにコピーする。の発展で
AからBに移動する。みたいな発想はなかったんかな?
そうすれば/dev/nullに移動 = 削除になったと思うんだが
移動も削除も実装w

158:デフォルトの名無しさん
20/04/16 15:26:12 MiKwJnZu.net
消去したいパスのリストをファイルに入れておいて(1行1パス)
cat path_list.txt | xargs rm -rf
みたいなことをしてるのですが、ファイルのパスでワイルドカード(アスタリスク)を
使いたくなりました。

単純にパスのリスト中でアスタリスクを使っても展開されないようですが、
展開させるにはどうするのがいいでしょうか。

159:デフォルトの名無しさん
20/04/16 15:32:46.71 pf1fo5EI.net
>>155
ファイル名に*という文字が含まれている場合はどうするの?

160:デフォルトの名無しさん
20/04/16 15:33:05.34 pf1fo5EI.net
あ、いや、「*」という名前のファイル名があったらどうするの?

161:デフォルトの名無しさん
20/04/16 15:58:03 phPWx1q3.net
$ ls
foo.log bar.log baz.txt qux.txt *.txt input.txt

$ cat input.txt
*.log
'¥*.txt'

$ cat input.txt | xargs -I {} bash -c 'ls {}'
bar.log foo.log
*.txt

162:デフォルトの名無しさん
20/04/16 18:47:06.88 qyR5Ndp0.net
bash -cってどんな時に使うんです?
簡単なシェルスクリプトならググらず書けるようにはなったけどまだよく分からん
関数もaliasも使えない分安全だろうけど使いたい時はどうするの

163:デフォルトの名無しさん
20/04/16 19:26:09.12 pf1fo5EI.net
>>159
その場でbashでコード実行したいときだろ?
今使ってるシェルがzshで、bashだったらどう動くか確認したり
シェルにログインするまでもないなとか

164:デフォルトの名無しさん
20/04/16 19:28:03 pf1fo5EI.net
あと環境汚すようなときにも使うな。
関数定義してなにかしたいけど、後で消したいとか
まあサブシェルとかでもいいんだけど

165:デフォルトの名無しさん
20/04/16 19:39:39 MiKwJnZu.net
>>158
なるほどー。素晴らしい。

166:デフォルトの名無しさん
20/04/16 21:47:35.66 phPWx1q3.net
>>159
interactive shellじゃない場合は
`shopt -s expand_aliases; source <alias設定file>` でエイリアスが展開される
$ cat .alias_and_fn
alias ll='ls -tAhG'
foo() {
echo "foobar!!"
}
$ cat input.txt | xargs -I {} bash -O expand_aliases -c $'source .alias_and_fn;¥n ll {}; foo'
行単位で読み込むときにalias展開するからaliasを設定した後に改行入れてから使う
interactiveなログインシェルとして起動したければ`bash -cli`とか
詳しくはman bashで

167:デフォルトの名無しさん
20/04/16 22:37:57 tywb42E3.net
bash -c は、よく見る

168:56
20/04/17 06:27:50 wSTFfL+S.net
>>56
ようやく、分かりますた!

xxx="$(command -v rbenv)"
と、端末で直接実行すると、xxx は、rbenv となって、パスが付かないのは、
すでに、rbenv という関数が定義されたファイルを読み込んでいるため、
同名のコマンドよりも先に、関数が見つかるから

一方、xxx="$(command -v rbenv)"
と、bash スクリプト内に書いて、スクリプトを実行すると、
xxx は、~/.rbenv/bin/rbenv とパスが付くのは、
rbenv という関数が定義されたファイルを読み込んでいないため、コマンドが見つかるから

シェル関数を使うには、その関数が定義されたファイルを読み込んでから使うのか

169:デフォルトの名無しさん
20/04/17 06:41:06 BxfxWji9.net
Ubuntuでシステムのシェルってdashになってるみたいですけど、確かこれってbashより
速いからって理由でしたっけ?

実際どのぐらい違うか興味があるんですが、どこかにdashとbashのベンチマーク比較した
情報とかあります? (自分でやれって? w)

170:デフォルトの名無しさん
20/04/17 10:38:11 9nBzfuh2.net
>>166
なんの速度かは言わないがあるツールをdashで動かしたら約3秒
bash 5.0 だと 11秒、kshだと6秒でzshだと9秒

171:デフォルトの名無しさん
20/04/17 10:44:00 9nBzfuh2.net
dashを選んでるのは速度もあるしPOSIX準拠ってのもあるだろうね

172:デフォルトの名無しさん
20/04/17 14:54:31 Urb0mH6b.net
関数を一行で書く時エラーで悩んでたけど波括弧ってに空白いるのな
foo(){ echo foo;}
小括弧だと必要ないのに何この初見殺し

173:デフォルトの名無しさん
20/04/17 15:09:03 xgpGiYXu.net
>>169
shellcheck使うといいよ

174:デフォルトの名無しさん
20/04/17 15:40:41 9nBzfuh2.net
>>169
zshは空白無くても動く

zsh -c 'foo(){echo test;};foo
test

dashはコンパイルエラー起こらないと思いつつ、実行するとエラーになり
dash -c 'foo(){echo test;}' # コンパイルエラー起こらない
dash -c 'foo(){echo test;};foo' # でも実行すると怒られる

実は"最後の" ; がおかしい
dash -c 'foo(){echo test;} foo' # これを実行するとこうなる
{echo: not found

エラー内容から、最初の { がおかしい事がわかる。これが正解
dash -c 'foo()echo test;} foo'
test

後ろの } はただのノイズだと思われるので、とってあげても動く
dash -c 'foo()echo test; foo'

↑これは POSIX 準拠なので(笑)zshやkshやmkshでも動く
でもbashやyashでは動かない

そこから考えると
dash -c 'foo()echo test;foo' は動くということがわかるし、
dash -c 'foo()echo test;}foo' は
foo()echo test +}foo になるので、 }foo: not found と表示されることも理解できる

175:デフォルトの名無しさん
20/04/17 16:52:28 nls2b0po.net
>>171
> dash -c 'foo()echo test; foo'
>
> ↑これは POSIX 準拠なので(笑)zshやkshやmkshでも動く
> でもbashやyashでは動かない

それは bash や yash の方が正解
関数定義の本体は複合コマンド(compound command)のみ
URLリンク(pubs.opengroup.org)

ちなみに yash や posh はこれに関して、bash よりも分りやすいエラーメッセージを吐く:

% yash -c 'f() echo'
yash -c:1: syntax error: a function body must be a compound command
% posh -c 'f() echo'
posh: f: function definition must use compound command
%

176:デフォルトの名無しさん
20/04/17 17:38:27.88 9nBzfuh2.net
>>172
compound-command は必ずしもグループ化しろとは書かれてないよ
グループ化はオプション
URLリンク(pubs.opengroup.org)

177:デフォルトの名無しさん
20/04/17 19:28:17.38 3FstJMua.net
>>170
これいいですね
解説が丁寧で、初心者の自分には勉強になる

178:デフォルトの名無しさん
20/04/17 19:40:14.03 nls2b0po.net
>>173
何を言いたいのかわからない
>>172のリンク先で関数定義の形式として示されているのは
fname ( )


179: compound-command [io-redirect ...] の一種のみ echo test は compound-command ではないから foo() echo test; などは上記の形式には当てはまらない という話なんだけど 「グループ化」云々ってどっから出てきたの



180:デフォルトの名無しさん
20/04/17 19:56:23 UJSQQO8I.net
え,関数って一行で定義するときは
foo() echo hello;
みたいに波括弧で括る必要ないの?
知らんかった。

181:デフォルトの名無しさん
20/04/17 19:58:37 9nBzfuh2.net
>>175
リンク先見ろ、Grouping Commands って書いてあるだろ

compound-command は
 () や {} でグループ化してもいいし、しなくてもいい
 単一のコマンドも compound-command
 というか、単一のコマンドが compound-command であり
 複数のコマンドをまとめる時に Grouping Commands を使う

182:デフォルトの名無しさん
20/04/17 19:59:07 9nBzfuh2.net
>>176
本来はね。でもbashで対応してないから事実上諦めるしかない。

183:デフォルトの名無しさん
20/04/17 20:01:55 9nBzfuh2.net
>>176
あとグループ化するのに使うのは {} または () なので

foo() { echo hello; } の代わりに
foo() (echo hello) と書いても良い

こっちはbashやyashも対応している。
ただし当然のことながらサブシェルで実行される。

184:デフォルトの名無しさん
20/04/17 20:05:05 9nBzfuh2.net
fname ( ) compound-command [io-redirect ...]
の最後からわかるように

foo() { echo hello; } >/dev/null や
foo() (echo hello) >/dev/null とも書ける

もちろん複数行でこのように書いてもいい
関数が出すエラーを全て捨てる場合とかに使える

foo() {
 echo hello
} 2>/dev/null

185:デフォルトの名無しさん
20/04/17 20:07:41 nls2b0po.net
>>177
> 単一のコマンドも compound-command
> というか、単一のコマンドが compound-command であり

それ初耳だわ
どこに書いてある?

186:デフォルトの名無しさん
20/04/17 20:13:43.55 9nBzfuh2.net
>>181
なんのために Grouping Commands と別に説明してある思ってる?
Grouping Commands を作るための {} または () が必須じゃないから、
「compound-commands の定義は {} または () で始まる」と*書かれてない*んだよ

187:デフォルトの名無しさん
20/04/17 20:56:24 xgpGiYXu.net
2.9.4 Compound Commands
The shell has several programming constructs that are "compound commands", which provide control flow for commands.

Each of these compound commands has a reserved word or control operator at the beginning, and a corresponding terminator reserved word or operator at the end

でその後Compound Commandsとして上げられてるが以下の6つ
- Grouping Commands
- The for Loop
- Case Conditional Construct
- The if Conditional Construct
- The while Loop
- The until Loop

echo helloは開始・終了を示す予約語もなければ、上の6つのどれにも当てはまらないからCompound Commandではない

188:デフォルトの名無しさん
20/04/17 20:57:55 xgpGiYXu.net
foo() if true; then echo "foobar"; fi
↑こういうのはOK

↓shellcheckの解説
POSIX allows the body of a function to be any compound command, e.g. foo() for i; do :; done. Since this usage is rare, ShellCheck intentionally requires the body to be { ..; } (or ( ..; )):
URLリンク(github.com)

189:デフォルトの名無しさん
20/04/17 21:06:47 9nBzfuh2.net
>>183
Compound Commands はその6つって言いたいの?

なら以下の関数定義はPOSIX 準拠ってことだね

foo() for i in a b c; do echo $i; done
foo() case a in a) echo a; esac
foo() if [ a ]; then echo a; fi
foo() while [ $# -gt 0 ]; do echo $1; shift; done

190:デフォルトの名無しさん
20/04/17 22:32:27 UJSQQO8I.net
<<. dash
foo() echo hello
foo
.
hello

たしかにDashだと問題なく定義できるな……。
こんなこと始めて知ったわ。実地で使うかどうかは置いといてw

191:【B:86 W:60 H:84 (C cup) 149 cm age:21】
20/04/17 23:15:40 lZxGXmOk.net
要するに素直に括弧でくるんどけってことやな

192:デフォルトの名無しさん
20/04/18 00:16:26 sxA+eVU/.net
>>166
URLリンク(unix.stackexchange.com)

193:デフォルトの名無しさん
20/04/18 00:28:42 6r7FvQ+k.net
>>169
type { }やると分かるけど{}はシェルの予約語
{}に意味があるから{ この空白も閉じる前の;}もいる
for i inをforiinにできないようなもんで
()はtypeで何も出てこないけどね

194:デフォルトの名無しさん
20/04/18 13:41:33 6HUqz/fc.net
set -eの挙動について教えて下さい!

これを実行したら何も表示されずに終了されました
set -e
foo() {
false
echo foo
}
foo
echo $?

その理由はわかります

質問はfooの中身を一切変えずにset -eの状態で
fooを画面に表示させずに $? (= 1) を
取得する方法はあるのでしょうか?

195:デフォルトの名無しさん
20/04/18 13:58:58.99 iaqzJhUO.net
{ と [ は記号でなく「コマンド」
$ ls -l

$ ls-l
とスペースを入れないと動かなくなる
これと一緒

196:デフォルトの名無しさん
20/04/18 15:04:41 uOWDKjxa.net
>>190
! ret=foo
echo $?

or

if ret=$(foo); then
echo "truthy" "$ret" "$?"
else
echo "falsy" "$ret" "$?"
fi

197:デフォルトの名無しさん
20/04/18 16:16:36.81 6HUqz/fc.net
>>192
> ! ret=foo
なんですか、これ!?って思ったらfoo関数呼び出してないじゃないですかぁ
> if ret=$(foo); then
なるほど、これで取得できるんですねって思って
やったんですけど truthy foo 0 ってでました

198:デフォルトの名無しさん
20/04/18 16:53:00.73 8o9dGOG1.net
>>190
パイプライン (1 つの 単純なコマンド からなるものでもよい)、 括弧で囲まれた サブシェル のコマンド、 ブレース (前述の シェルの文法 を参照) で囲まれたコマンドのリストの一部として
実行されたコマンドの 1 つ が 0 でないステータスで終了した場合、即座に終了します
だから。falseの時点でどうであれメインシェルプロセスがそこで終了、echo fooなんて実行しない、もちろん呼び出し元にも戻らない
>>192は上記に続く文に沿ってのじゃないかなあ。だが、if false; then ... とかの話で、違うだろうな文的にも。わざとなのかわからんけどw
そういう動作を望んで set -e してるのにそういう動作すんなって無理じゃね

199:デフォルトの名無しさん
20/04/18 17:07:44.49 8o9dGOG1.net
bash 限定なら、
export -f foo
bash -c 'foo' && echo $? || echo $?
で、一応動くようではあるな(ちゃんとfooでのステータス値も返る)

200:デフォルトの名無しさん
20/04/18 17:44:44.40 8o9dGOG1.net
>>195
bash -c 'set -e;foo' && echo $? || echo $?
だった。set -e は別に継承されるわけないと後で気づいた
で、>>192のネタ確認してみたらできそうなのね。$()なんて出力結果求めるのにしか使ったことないのでこれでいいのか??と頭ウニだけど
if $(set -e && foo); then echo $?; else echo $?; fi
なんかbash限定でもなく動いてるな(w)

201:デフォルトの名無しさん
20/04/18 17:58:24.37 8o9dGOG1.net
あぁ、$() は正常時はやっぱりダメか。そりゃそうだな(スッキリしたw)
ret=$(foo) のような、なんか工夫すればできそうな気もしないでもないが。そういうことなのね、失礼>>192

202:デフォルトの名無しさん
20/04/18 18:28:05.36 fB7EV6Kq.net
その方針なら
export -f foo;
ret=$(bash -c 'foo; echo $?');
echo $ret;
で良いんじゃね?

203:デフォルトの名無しさん
20/04/18 19:01:48.64 8o9dGOG1.net
出力結果をスクリプトで扱うために欲しいわけじゃないから
$() だと関数も外部コマンドのように別(のメイン)プロセスとして呼べる=bash固有のでなくて使えそうだなあという、ニコイチではなくどっちかの話

204:デフォルトの名無しさん
20/04/18 19:14:49 fB7EV6Kq.net
ああすまん、fooの出力を忘れてた。

205:デフォルトの名無しさん
20/04/18 23:55:48 L3zGDU5z.net
$ $(echo hoge)
hoge: command not found
まあ、当然そうだわな
$ $(exit 12)
$ echo $?
12
へー、コマンドねえぞとお怒りにはならんのか。空行とみなして無かったこと(?)になるのか
echo ' 'とかスペースタブだけ(?)なら許してくれる、: と違いステータスも変わらない

てことで、標準出力に何も出さなければいいのねで、

exec 9>&1
$(set -e; foo >&9) && echo $? || echo $?

でbash以外でも動くことは動く ($() 内ってCommandsでもいいのね)
$()内での set -e はない方がスッキリだが必要ないシェルもあるもあるが必要とするシェルがある

206:デフォルトの名無しさん
20/04/19 00:14:03 u21QryuH.net
例えば、Ruby のバージョンマネージャー・rbenv の、rbenv-installer の冒頭部分は、

#!/bin/bash

# コマンドの終了コードが、0以外なら強制終了する
set -e

homebrew=

# -p : タイプが「file(実行ファイル)」の時のみ実行ファイルの絶対パスを出力する
# (それ以外のタイプの場合は何も出力しない)

type -p brew >/dev/null && homebrew=1

207:デフォルトの名無しさん
20/04/21 09:06:14 h1bS6DJt.net
コマンドってファイルに書くのと実行形式を~/binに置くのとどっちがいいの
関数とエイリアスの違いは分かったけど使い分けできてないな

208:デフォルトの名無しさん
20/04/21 10:50:42 FcWzzI7X.net
/dev/urandomっていうデバイスファイルが,
ほんとにただのファイルとか実は同じ値ばっかり出力するデバイスファイルとか
じゃないってことを保証する方法ってある?

209:デフォルトの名無しさん
20/04/21 13:16:25.79 bkXsrA+q.net
>>203
いろんなところで使いたいコマンドは ~/bin に置いておいて
パスを通しておく。限定的な使い方をするコマンドはそのディレクトリに
置いておくのかな。私はそうしている。

210:デフォルトの名無しさん
20/04/21 15:24:10 Lx1iEb8v.net
>>204
ないよ。
作ろうと思えば/dev/urandomを独自実装のデバイスファイルに置き換えられるんだから。
それっぽい値を返すデバイスファイルを作ろうと思えば作れる
例えばWSL1はWindowsでLinuxカーネルをエミュレートしてるんだから
/dev/urandom とかMSの独自実装のデバイスでしょ?

211:デフォルトの名無しさん
20/04/21 15:27:13.15 Lx1iEb8v.net
>>203
コマンドをファイルに書くって関数のこと?
CLIから呼び出す汎用的なものは~/binで
スクリプト内部で使うだけなら関数にするだけじゃないの?
そしてエイリアスはインタラクティブシェルで使うもの
bashがデフォルトでスクリプトでは無効になってるのはそういう事

212:デフォルトの名無しさん
20/04/21 16:17:24 fQ5b9H0O.net
>スクリプト内部で使うだけなら関数にするだけ
と思い込んでたら、>>56みたいになるぞw
>bashがデフォルトでスクリプトでは無効になってるのはそういう事
まあ、4からか?そういう方がいいだろうと思い変えたのだろうが、--posixでは有効なんだけどな

213:デフォルトの名無しさん
20/04/21 16:29:23 Lx1iEb8v.net
>>56は、rbenvはインタラクティブシェルで使うために
alias使ってるんでしょ?

> まあ、4からか?
ずっと前からやろ?

214:デフォルトの名無しさん
20/04/21 16:30:27 Lx1iEb8v.net
URLリンク(pubs.opengroup.org)
POSIXでも interactive utilities.って言われてるぐらいだしな

215:デフォルトの名無しさん
20/04/21 16:43:50 fQ5b9H0O.net
>>209
残念ながら、3はそうなってない

216:デフォルトの名無しさん
20/04/21 16:47:30.51 fQ5b9H0O.net
>>210
ちゃんと読めよ

217:デフォルトの名無しさん
20/04/21 16:59:29 fQ5b9H0O.net
>>209
>alias使ってるんでしょ?
ああ...これもか...
色々想像するのは勝手だが、なんか色々勝手な想像ばかりで全く調べてないなって感じだぞ

218:デフォルトの名無しさん
20/04/21 17:43:01.90 fQ5b9H0O.net
>>209,211
ああ、すまん
実行できないのは最初からだし、存在さえもしないのは3以降からだな(2では存在はするが実行時エラー)
>まあ、4からか?そういう方がいいだろうと思い変えたのだろうが
の部分は間違い勘違い、すまん

219:デフォルトの名無しさん
20/04/21 18:23:13 Lx1iEb8v.net
>>213
調べるとか何のこと?
スクリプト内部でだけ使うなら関数って言ってるだけなんだけど?


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

534日前に更新/283 KB
担当:undef