シェルスクリプトに関する総合スレッドです。
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。
シェルスクリプト総合 その31
https://mevius.5ch.net/test/read.cgi/tech/1565446670/
探検
シェルスクリプト総合 その32
レス数が950を超えています。1000を超えると書き込みができなくなります。
2019/10/25(金) 00:08:45.53ID:6btPTvif
878デフォルトの名無しさん
2020/03/15(日) 22:24:16.72ID:GTp/Qp/S 「Bash拡張」ではなく「GNU拡張」なんぞに置き換えればいいだけだな
879デフォルトの名無しさん
2020/03/15(日) 22:30:33.87ID:7377Zo4Z880デフォルトの名無しさん
2020/03/15(日) 22:35:36.36ID:GTp/Qp/S881デフォルトの名無しさん
2020/03/15(日) 22:42:53.24ID:7377Zo4Z 蛇足って話をするのなら、外部コマンドに反論すること自体が蛇足
そんなどうでもいいことじゃなくて、
sedでprintf '%s' "$var"とか言う意味不明な点を説明しろよ
変数の値に対しての操作が一発でできないのは「外部コマンド」ならどれも一緒だろ
そんなどうでもいいことじゃなくて、
sedでprintf '%s' "$var"とか言う意味不明な点を説明しろよ
変数の値に対しての操作が一発でできないのは「外部コマンド」ならどれも一緒だろ
882デフォルトの名無しさん
2020/03/15(日) 22:48:02.29ID:GTp/Qp/S 思い込みの理由を述べただけと読んでやれよ。なんでそうも噛み付いているの?
sedにネタ元渡すためにはとかじゃないの?echoでもいいんじゃないの?ソコは
exprは対象を引数として渡せるぐらいの意味、動作及び返り値が単純だから変数をちょっとイジるくらいならsedよりもって話じゃないの。俺はそう読み取ったけど
なんでそうも強く噛み付いているの?
sedにネタ元渡すためにはとかじゃないの?echoでもいいんじゃないの?ソコは
exprは対象を引数として渡せるぐらいの意味、動作及び返り値が単純だから変数をちょっとイジるくらいならsedよりもって話じゃないの。俺はそう読み取ったけど
なんでそうも強く噛み付いているの?
883デフォルトの名無しさん
2020/03/15(日) 22:50:35.45ID:7377Zo4Z > なんでそうも強く噛み付いているの?
噛み付いてないけど?俺はexprは外部コマンドと言っただけ
それ以外のことを言ってない。
過剰に反応してるのはお前では?
噛み付いてないけど?俺はexprは外部コマンドと言っただけ
それ以外のことを言ってない。
過剰に反応してるのはお前では?
884デフォルトの名無しさん
2020/03/15(日) 22:53:20.23ID:GTp/Qp/S 蛇足なことが続くなと思ったからだけど。蛇足な理由を言っただけだけど?
>>881なんて明らかに噛み付いているだろうにw 特に後半とか。よく言うよ
>>881なんて明らかに噛み付いているだろうにw 特に後半とか。よく言うよ
885デフォルトの名無しさん
2020/03/15(日) 22:59:01.24ID:7377Zo4Z 後半?これ?蛇足(bash拡張かどうか)じゃなくて本筋の話をしろとしか書いてないが?
> sedでprintf '%s' "$var"とか言う意味不明な点を説明しろよ
> 変数の値に対しての操作が一発でできないのは「外部コマンド」ならどれも一緒だろ
> sedでprintf '%s' "$var"とか言う意味不明な点を説明しろよ
> 変数の値に対しての操作が一発でできないのは「外部コマンド」ならどれも一緒だろ
886デフォルトの名無しさん
2020/03/15(日) 23:07:40.57ID:9BnnGhWf 無茶苦茶だなとしか言いようがない
で、その応えは>>882で納得したのかね?合っているのか知らんけど、俺は一応そうは読めたからなあ、「意味不明な点を[説明しろよ]」とか何様なんだか何噛み付いているのかとしか思えない
で、その応えは>>882で納得したのかね?合っているのか知らんけど、俺は一応そうは読めたからなあ、「意味不明な点を[説明しろよ]」とか何様なんだか何噛み付いているのかとしか思えない
887デフォルトの名無しさん
2020/03/15(日) 23:29:41.29ID:ekOFLY9+ えぇ……なんでそうも喧嘩腰なんですかね……。
888デフォルトの名無しさん
2020/03/15(日) 23:42:33.62ID:9BnnGhWf わからん...性かなww
889デフォルトの名無しさん
2020/03/15(日) 23:47:47.62ID:LgQopvr+ こんな所でしか他人に相手にして貰えないからでしょ?
890デフォルトの名無しさん
2020/03/15(日) 23:50:43.81ID:9BnnGhWf 読めなさそうな人はそうかもねw
891デフォルトの名無しさん
2020/03/15(日) 23:52:26.22ID:Uvpryj8C892デフォルトの名無しさん
2020/03/16(月) 05:03:15.13ID:OSNWgEHh シンタックスエラーになるのに、問題なく実行できる例
shopt -s expand_aliases
alias loop=for
loop i; do
echo "$i"
done
だからなんだって言われても困るけどwww
shopt -s expand_aliases
alias loop=for
loop i; do
echo "$i"
done
だからなんだって言われても困るけどwww
893デフォルトの名無しさん
2020/03/16(月) 05:05:37.60ID:OSNWgEHh キーワードを全部置き換えれば対象可能かな?
shopt -s expand_aliases
alias loop=for
alias begin=do
alias end=done
loop i; begin
echo "$i"
end
shopt -s expand_aliases
alias loop=for
alias begin=do
alias end=done
loop i; begin
echo "$i"
end
894デフォルトの名無しさん
2020/03/17(火) 01:19:59.84ID:tnhbC/l2 まだ初歩的なシェルスクリプトしか書けないがbashで一番変態的な記法ってなによ
空白を入れないfoo=barの時点で妙だし配列が括弧だらけでマンドクセとは思うが
空白を入れないfoo=barの時点で妙だし配列が括弧だらけでマンドクセとは思うが
895デフォルトの名無しさん
2020/03/17(火) 02:44:04.56ID:DZYZalLc さあなぁ、シェルスクリプトのコマンド=外部コマンド
だからファイル名につけられる文字や名前はすべて外部コマンド名として許されるべきだろうから
そうすると、やたらとコマンドを増やすわけにはいかないんだよね。
ABC = 123 とか書くと、ABCコマンドがあったらどうするんだ!?ってなるわけで、
ABC=123という風にファイル名にイコール使わないんじゃね?という前提にした
という理由があるから、そうなってるのわかるしなぁ。
ABC[123]とかいう外部コマンドだって作ろうと思えば作れるし
${aaaなんとか}シリーズが多いのも、既存の文法の拡張だけでやりたいからだろうし、
理由がわかれば、なっとくできるからなぁ。
んで、シェルスクリプトではそれ以外の拡張はしづらい運命にあるから、
逆に変態的な記法ってないで。変態な記法を作ろうと思っても作れない。
だからファイル名につけられる文字や名前はすべて外部コマンド名として許されるべきだろうから
そうすると、やたらとコマンドを増やすわけにはいかないんだよね。
ABC = 123 とか書くと、ABCコマンドがあったらどうするんだ!?ってなるわけで、
ABC=123という風にファイル名にイコール使わないんじゃね?という前提にした
という理由があるから、そうなってるのわかるしなぁ。
ABC[123]とかいう外部コマンドだって作ろうと思えば作れるし
${aaaなんとか}シリーズが多いのも、既存の文法の拡張だけでやりたいからだろうし、
理由がわかれば、なっとくできるからなぁ。
んで、シェルスクリプトではそれ以外の拡張はしづらい運命にあるから、
逆に変態的な記法ってないで。変態な記法を作ろうと思っても作れない。
896デフォルトの名無しさん
2020/03/17(火) 02:51:08.61ID:DZYZalLc シェルスクリプトの欠点?というわけでもないが、
仕様としてコマンド置換は最後に連続する改行が消えるから
var=$(func 1 2 3) みたいな形で、便利な関数を追加するのが
難しいんだよね。最後の改行が消えるから
いろんな機能が${varなんとか}の形で提供されてるのは、
これなら変数の代入だから最後の改行が消ないから
変態的な記法というならこれかなぁ、配列もそうだし
何でもかんでも${varなんとか}という形で機能拡張が行われてる
最近の ${parameter@operator} とかね
仕様としてコマンド置換は最後に連続する改行が消えるから
var=$(func 1 2 3) みたいな形で、便利な関数を追加するのが
難しいんだよね。最後の改行が消えるから
いろんな機能が${varなんとか}の形で提供されてるのは、
これなら変数の代入だから最後の改行が消ないから
変態的な記法というならこれかなぁ、配列もそうだし
何でもかんでも${varなんとか}という形で機能拡張が行われてる
最近の ${parameter@operator} とかね
897デフォルトの名無しさん
2020/03/17(火) 14:49:49.69ID:+LpQdzFa898デフォルトの名無しさん
2020/03/17(火) 20:33:42.42ID:WZhpPu/2 >>894
かっこがコマンドであるという点かなあ
かっこがコマンドであるという点かなあ
899デフォルトの名無しさん
2020/03/18(水) 01:29:14.04ID:9x4eFjJt900デフォルトの名無しさん
2020/03/19(木) 09:42:42.24ID:+0MAARlE exprについて教えてください。
現在tarで圧縮したファイルの末尾に数字をつける処理を使っています。
A=tarファイル名
B='expr = $A + 1'
tar czvf B 対象ファイル名
上の処理で実行すると、[整数でない引数]と表示されてしまい数字が付かないtarが出るのですが何故でしょうか。
現在tarで圧縮したファイルの末尾に数字をつける処理を使っています。
A=tarファイル名
B='expr = $A + 1'
tar czvf B 対象ファイル名
上の処理で実行すると、[整数でない引数]と表示されてしまい数字が付かないtarが出るのですが何故でしょうか。
901デフォルトの名無しさん
2020/03/19(木) 09:47:58.88ID:YUAN2W2v exprコマンドは廃止されました。
使ってはいけません。
使ってはいけません。
902デフォルトの名無しさん
2020/03/19(木) 10:02:09.16ID:QNV2kCYN tarファイル名 が [整数でない引数] だからというその表示のまま
他にもツッコミどころがありすぎ
他にもツッコミどころがありすぎ
903デフォルトの名無しさん
2020/03/19(木) 10:09:58.74ID:JDU05jIv expr の四則演算は、整数しか使えないのかも。
こういう感じ
echo `expr 100 + 20`
#=> 120
まあ、expr で検索して!
こういう感じ
echo `expr 100 + 20`
#=> 120
まあ、expr で検索して!
904デフォルトの名無しさん
2020/03/19(木) 10:25:57.68ID:YUAN2W2v だからさぁ、整数の計算ごときで
expr使うなって
expr使うなって
905デフォルトの名無しさん
2020/03/19(木) 11:40:21.72ID:Ul0ojJdl とりあえずでもいいだろ。俺は知ってるを押し付けすぎ
906デフォルトの名無しさん
2020/03/19(木) 12:30:37.63ID:awkeHjZR907デフォルトの名無しさん
2020/03/19(木) 13:14:01.73ID:JDU05jIv 文字列の連結なら、普通に続けて書けばよい
a=xyz
b=${a}11
echo $b
#=> xyz11
a=xyz
b=${a}11
echo $b
#=> xyz11
908デフォルトの名無しさん
2020/03/19(木) 14:30:55.18ID:awkeHjZR >>907
その例でいうと"11"が不明なのです。
tarを作成する際に同じ名前のtarがすでにあった場合は数字をつけたいんですよね。
すでに同一ファイル名があったら1をつける。
同一ファイル名1があったら2に変えるみたいな…。
名前の重複を避けたいのです
その例でいうと"11"が不明なのです。
tarを作成する際に同じ名前のtarがすでにあった場合は数字をつけたいんですよね。
すでに同一ファイル名があったら1をつける。
同一ファイル名1があったら2に変えるみたいな…。
名前の重複を避けたいのです
909デフォルトの名無しさん
2020/03/19(木) 15:05:23.65ID:JDU05jIv 名前が重ならない、temp ファイルを使えば?
mktemp コマンドを利用して、ユニークな名前の一時ファイルを作成する
それか、ファイル名に、タイムスタンプを含めれば?
1 とか、2 を付けるのは難しい。
1があれば、2にして、
2もあれば、3にして、
こういうループは難しい
mktemp コマンドを利用して、ユニークな名前の一時ファイルを作成する
それか、ファイル名に、タイムスタンプを含めれば?
1 とか、2 を付けるのは難しい。
1があれば、2にして、
2もあれば、3にして、
こういうループは難しい
910909
2020/03/19(木) 15:12:34.38ID:JDU05jIv911デフォルトの名無しさん
2020/03/19(木) 15:43:33.78ID:A3B3oNfE >>908
プログラミング的なスクリプトを書かないとだめだろう
通番をつけるのは今何がつけられていて
その中での最大が何でそれにプラス1するって処理が必要で
複雑になるから通番なしのものがあれば
日時入れるのが妥当なのではないかな
プログラミング的なスクリプトを書かないとだめだろう
通番をつけるのは今何がつけられていて
その中での最大が何でそれにプラス1するって処理が必要で
複雑になるから通番なしのものがあれば
日時入れるのが妥当なのではないかな
912デフォルトの名無しさん
2020/03/19(木) 15:44:22.95ID:A3B3oNfE ちなみにwgetであればオプションにもよるけど
ダウンロードしようとしてるファイルがすでにあれば
通番をつけるようになってるけどtarとかでは聞かない
ダウンロードしようとしてるファイルがすでにあれば
通番をつけるようになってるけどtarとかでは聞かない
913デフォルトの名無しさん
2020/03/19(木) 16:37:23.68ID:Pzb6grX0 連番のH画像/動画を一気にダウンロードする7.5 [無断転載禁止]©2ch.net
http://mevius.5ch.net/test/read.cgi/unix/1459277070/
http://mevius.5ch.net/test/read.cgi/unix/1459277070/
914デフォルトの名無しさん
2020/03/19(木) 18:00:54.20ID:fgd/sgV0 ttps://qiita.com/tomiokario/items/a0b635d09995bb74503b
これを参考にしたのかな? まあ足してるの整数同士だけど。このまま試してみればいい
じゃん。ただ、機能するけどちょっと直さないと名前がおかしくなると思うたぶん。
これを参考にしたのかな? まあ足してるの整数同士だけど。このまま試してみればいい
じゃん。ただ、機能するけどちょっと直さないと名前がおかしくなると思うたぶん。
915デフォルトの名無しさん
2020/03/19(木) 18:26:31.73ID:A3B3oNfE それとはちと違う
いや大幅に違う
いや大幅に違う
916デフォルトの名無しさん
2020/03/19(木) 18:49:11.91ID:CK8P50/C ID:awkeHjZR が参考にしたのだろ
既存の最大の次でもない、単にあったら次だな、今までのレスからは
誰もが使うのだったら既存の最大の次の方が望ましいだろけど
既存の最大の次でもない、単にあったら次だな、今までのレスからは
誰もが使うのだったら既存の最大の次の方が望ましいだろけど
917デフォルトの名無しさん
2020/03/19(木) 19:05:06.03ID:CK8P50/C ああ、最大にはなってるのか。いちおう
間に欠番があってはとか、というよりちょっとアレだなという、「大幅に違う」か(?)
間に欠番があってはとか、というよりちょっとアレだなという、「大幅に違う」か(?)
918デフォルトの名無しさん
2020/03/19(木) 19:11:21.47ID:CK8P50/C あ、いや、やっぱ、あったら次なだけか
しつれい
しつれい
919デフォルトの名無しさん
2020/03/19(木) 19:20:02.01ID:awkeHjZR920デフォルトの名無しさん
2020/03/19(木) 22:46:59.86ID:0V5Z+nsf A=tarファイル名
B="$A"
if [ -e "$B" ]; then
e="${B##*.}"; [ "$e" = "$B" ] && e='' || e=".$e"
B="${B%.*}"
x=0
for f in "$B"*$e; do
v="$(expr "${f%.*}" : '.*[^1-9]\([1-9][0-9]*$\)')"
[ "$v" -gt "$x" ] 2> /dev/null && x=$v
done
B="$B$((x+1))$e"
fi
echo tar czvf "$B" 対象ファイル名
Aが存在しない場合はそのまま、存在する場合は連番付きの最大+1
Aは拡張子付いていてもいい
風な
B="$A"
if [ -e "$B" ]; then
e="${B##*.}"; [ "$e" = "$B" ] && e='' || e=".$e"
B="${B%.*}"
x=0
for f in "$B"*$e; do
v="$(expr "${f%.*}" : '.*[^1-9]\([1-9][0-9]*$\)')"
[ "$v" -gt "$x" ] 2> /dev/null && x=$v
done
B="$B$((x+1))$e"
fi
echo tar czvf "$B" 対象ファイル名
Aが存在しない場合はそのまま、存在する場合は連番付きの最大+1
Aは拡張子付いていてもいい
風な
921デフォルトの名無しさん
2020/03/19(木) 23:10:29.22ID:0V5Z+nsf Aに拡張子ない場合、 for直下に
[ "$e" = '' ] && [ "${f##.*}" = "$f" ] && continue
とか必要か
拡張子抜きの名前の最大の場合はこれはいらず
for f in "$B"*; do
でいいはず
拡張子無いのだけを抽出するGLOBってあったかな?
[ "$e" = '' ] && [ "${f##.*}" = "$f" ] && continue
とか必要か
拡張子抜きの名前の最大の場合はこれはいらず
for f in "$B"*; do
でいいはず
拡張子無いのだけを抽出するGLOBってあったかな?
922デフォルトの名無しさん
2020/03/20(金) 01:41:19.99ID:3O1eG+VM exprでの正規表現がよくわからない
何処かまとめてある所はありませんか?
何処かまとめてある所はありませんか?
923デフォルトの名無しさん
2020/03/20(金) 06:24:37.20ID:v4UpLchp924デフォルトの名無しさん
2020/03/20(金) 07:26:36.21ID:MAPSjPan >>923
問題はそれに従ってないものが多いw
問題はそれに従ってないものが多いw
925デフォルトの名無しさん
2020/03/20(金) 10:33:09.91ID:AIrE4YMP BREで動かないってどこのexpr?
926デフォルトの名無しさん
2020/03/20(金) 11:04:41.59ID:Cf4Df32C ユーザ名パスワード受け取って、シェルスクリプト内でloginさせるような使い方って普通?
docker login -n ユーザ名 -p パスワード
docker run イメージ
みたいな
docker login -n ユーザ名 -p パスワード
docker run イメージ
みたいな
927デフォルトの名無しさん
2020/03/20(金) 12:32:34.45ID:VFfjvmrc windowsはtempでLinuxはtmp派だと思ってたがmktempなんてあるのか
928デフォルトの名無しさん
2020/03/20(金) 15:01:17.57ID:b2ihZgLg >>926
そういうのはCredential Storeを使う
シェルスクリプトのことだけで言えば
echoさせずにパスワード入力させてそれをreadするのが普通
コマンドに渡すやり方だと最低でも履歴に残らないような対処が必要
そういうのはCredential Storeを使う
シェルスクリプトのことだけで言えば
echoさせずにパスワード入力させてそれをreadするのが普通
コマンドに渡すやり方だと最低でも履歴に残らないような対処が必要
929デフォルトの名無しさん
2020/03/20(金) 20:09:17.24ID:Cf4Df32C930デフォルトの名無しさん
2020/03/20(金) 22:01:17.87ID:PR7Jj0ZL >>925
そうじゃなくて、POSIXで正規表現が使えるコマンドは
expr、grep、awk があるが、例えば BREに対応と言いつつ
BRE以上のものにまで対応していて、どこまで対応してるのか
完全に一致しているのか改変されているのか、
拡張オプションが有るのか、バラバラと言うこと
そうじゃなくて、POSIXで正規表現が使えるコマンドは
expr、grep、awk があるが、例えば BREに対応と言いつつ
BRE以上のものにまで対応していて、どこまで対応してるのか
完全に一致しているのか改変されているのか、
拡張オプションが有るのか、バラバラと言うこと
931デフォルトの名無しさん
2020/03/20(金) 22:11:38.04ID:AIrE4YMP exprはBREだけだから関係ない話だな
932デフォルトの名無しさん
2020/03/21(土) 00:31:26.53ID:aSsBDGSZ 本当に?
933デフォルトの名無しさん
2020/03/21(土) 09:14:24.32ID:Nklv0DXu >>927
Windows 10, WSL, Ubuntu 18.04 で、
which mktemp
/bin/mktemp
でも、一時ファイルのパーミッションが、700 になるなど、ややこしくて使えない!
単純にそのディレクトリ内で、ユニークなファイル名がほしいだけ
Windows 10, WSL, Ubuntu 18.04 で、
which mktemp
/bin/mktemp
でも、一時ファイルのパーミッションが、700 になるなど、ややこしくて使えない!
単純にそのディレクトリ内で、ユニークなファイル名がほしいだけ
934デフォルトの名無しさん
2020/03/21(土) 10:15:51.52ID:aSsBDGSZ935デフォルトの名無しさん
2020/03/21(土) 10:17:30.61ID:HMPQgip5 できるけど
936デフォルトの名無しさん
2020/03/21(土) 10:24:42.26ID:HMPQgip5 >>934
テンポラリを表す省略形のことだろ
そのディレクトリは/tmpではないとこじゃね。PWDとか指定したのとか。できるけど
ファイル名だけもらっても実際にはファイル作ってるけど。単に作った直後に消してるだけ、まあ問題になりそうにないけど
700が困るのはさっぱりわからんな
テンポラリを表す省略形のことだろ
そのディレクトリは/tmpではないとこじゃね。PWDとか指定したのとか。できるけど
ファイル名だけもらっても実際にはファイル作ってるけど。単に作った直後に消してるだけ、まあ問題になりそうにないけど
700が困るのはさっぱりわからんな
937デフォルトの名無しさん
2020/03/21(土) 11:01:46.98ID:tuOdrSqm ファイル作らずに(コマンド実行時点で)一意なファイル名が欲しいだけならオプション付きで実行すればいいだけじゃね?
938933
2020/03/21(土) 11:20:35.77ID:Nklv0DXu 644 はよく見るけど、
700 はよく見るパーミッションじゃないから、困らないのかなと思って
700 はよく見るパーミッションじゃないから、困らないのかなと思って
939デフォルトの名無しさん
2020/03/21(土) 11:48:36.74ID:tuOdrSqm >>938
見たことあるものを見たことある方法でしか使えないお前は困るかもしれないが、普通の知識や技能のあるlinuxユーザは困らない。
見たことあるものを見たことある方法でしか使えないお前は困るかもしれないが、普通の知識や技能のあるlinuxユーザは困らない。
940デフォルトの名無しさん
2020/03/21(土) 12:21:57.49ID:HMPQgip5941デフォルトの名無しさん
2020/03/21(土) 12:35:34.94ID:HMPQgip5 00で困るような使い方(他に渡すとか)するにしてもお前のファイルなんだからchmodでも自分でしとけというとこやな
942デフォルトの名無しさん
2020/03/21(土) 13:00:59.59ID:kuk28tWG な?言ったとおりだっただろ?
↓>>938はパーミッションを分かってないだけだって
> 700 はよく見るパーミッションじゃないから、困らないのかなと思って
このパーミッションでOKかどうかっていうのは、
よく見るかどうかで決めるもんじゃないだろ
レビューでこのパーミッションはあまり見かけいないから困るだろ
とか指摘されたらぶっ○したくなるわw
↓>>938はパーミッションを分かってないだけだって
> 700 はよく見るパーミッションじゃないから、困らないのかなと思って
このパーミッションでOKかどうかっていうのは、
よく見るかどうかで決めるもんじゃないだろ
レビューでこのパーミッションはあまり見かけいないから困るだろ
とか指摘されたらぶっ○したくなるわw
943デフォルトの名無しさん
2020/03/21(土) 13:06:44.26ID:kuk28tWG 昔ウェブサービスでユニークなファイルを作るべき処理で
オレオレで年月日時分秒とかのファイルにして
アクセス多数で重複ファイルがでてトラブった会社あったなぁw
mktempにファイルを作らせないと
真にユニークな名前なんて作れねーんだよ
もしくは頑張ってmktempと同等のことをするとかな
そのためにはmktempがなぜそうしているかの理由を調べないといけない
オレオレで年月日時分秒とかのファイルにして
アクセス多数で重複ファイルがでてトラブった会社あったなぁw
mktempにファイルを作らせないと
真にユニークな名前なんて作れねーんだよ
もしくは頑張ってmktempと同等のことをするとかな
そのためにはmktempがなぜそうしているかの理由を調べないといけない
944デフォルトの名無しさん
2020/03/21(土) 13:42:32.99ID:ys6caT0H うちになんでもかんでもシェルスクリプトでやろうとする人がいるんですが
どうすればやめさせられますか?
GUI以外でシェルスクリプトでこんなことやるなっていうのを具体例付きでを教えて下さい
それを根拠に理論武装してあいつをぶちのめしてきますので
どうすればやめさせられますか?
GUI以外でシェルスクリプトでこんなことやるなっていうのを具体例付きでを教えて下さい
それを根拠に理論武装してあいつをぶちのめしてきますので
945デフォルトの名無しさん
2020/03/21(土) 13:55:11.55ID:VWAuyUcc 自分もなんでもかんでもシェルスクリプトでできるような知識を持つことだな
そんな誰か頼りではなくて
なんでもかんでも自分でもできるがしないじゃないとぶちのめせないだろ
そんな誰か頼りではなくて
なんでもかんでも自分でもできるがしないじゃないとぶちのめせないだろ
946デフォルトの名無しさん
2020/03/21(土) 14:08:20.00ID:FH3PvP3D >>944
シェルスクリプトではなくプログラミング言語を使った方がいいケースがこれまでにもあったということだろ。それならそのケースについて他の方法でやった方が良い理由を具体的に説明すればいいんでないの?
シェルスクリプトではなくプログラミング言語を使った方がいいケースがこれまでにもあったということだろ。それならそのケースについて他の方法でやった方が良い理由を具体的に説明すればいいんでないの?
947デフォルトの名無しさん
2020/03/21(土) 14:33:14.95ID:Nklv0DXu x=x
a=
b=
if [ $a = $b ]; then # 構文エラーw
fi
空文字で構文エラーになるから、下のように双方に、1文字ずつ追加して比べるw
面倒くさい
if [ $a$x = $b$x ]; then
echo $a$x #=> x
fi
a=
b=
if [ $a = $b ]; then # 構文エラーw
fi
空文字で構文エラーになるから、下のように双方に、1文字ずつ追加して比べるw
面倒くさい
if [ $a$x = $b$x ]; then
echo $a$x #=> x
fi
948デフォルトの名無しさん
2020/03/21(土) 17:00:58.81ID:EuPu7JS3 単にシェルでのコマンドに引数を与える時の一般規則
xなどつけるのが嫌なら "で囲めばいいだけだろ
xなどつけるのが嫌なら "で囲めばいいだけだろ
949デフォルトの名無しさん
2020/03/21(土) 17:17:50.80ID:57M5Xw8A950デフォルトの名無しさん
2020/03/21(土) 17:24:03.05ID:He36jL2X951デフォルトの名無しさん
2020/03/21(土) 20:36:22.88ID:57M5Xw8A952デフォルトの名無しさん
2020/03/21(土) 21:07:17.99ID:9LT6s2kW # This gives a "too many arguments" error as f* is expanded to the
# contents of the current directory
if [ "filename" == f* ]; then
echo "Match"
fi
とかどういう層向けのなんだろな。なんか上にいるのと同じレベル向けとしか思えない
echo "filename" == f* ]
などとまったく同じなのに、[ ] が何か特別(スクリプト構文?)とでも思ってしまう割と最近始めましたな人用かと思ってしまうな
# contents of the current directory
if [ "filename" == f* ]; then
echo "Match"
fi
とかどういう層向けのなんだろな。なんか上にいるのと同じレベル向けとしか思えない
echo "filename" == f* ]
などとまったく同じなのに、[ ] が何か特別(スクリプト構文?)とでも思ってしまう割と最近始めましたな人用かと思ってしまうな
953デフォルトの名無しさん
2020/03/21(土) 22:20:10.01ID:ys6caT0H >>947
引数は""で囲むのは常識。shellcheckでも指摘される。
引数は""で囲むのは常識。shellcheckでも指摘される。
954デフォルトの名無しさん
2020/03/22(日) 00:45:59.87ID:7aOor4nW955デフォルトの名無しさん
2020/03/22(日) 05:06:02.12ID:5UlsRo7e >どんな言語だって1つの関数が100行超えるようならやめるべきだし
これもよくわからんけどなあ
最初に一回だーっと降りてくるだけの処理を
こまこまこまこま関数に分けたがる奴はなんなん?と思う
シェルスクリプトなんか大体そういう処理だけだろ?
これもよくわからんけどなあ
最初に一回だーっと降りてくるだけの処理を
こまこまこまこま関数に分けたがる奴はなんなん?と思う
シェルスクリプトなんか大体そういう処理だけだろ?
956デフォルトの名無しさん
2020/03/22(日) 05:49:25.01ID:7aOor4nW >>955
え?シェルスクリプトで外部コマンド使わんの?
最初に一回だーっと降りてくるだけの処理でも
その中の一部を外部コマンドとか関数にするでしょ?
再利用するとか、そこだけ実行できるようにするために。
え?シェルスクリプトで外部コマンド使わんの?
最初に一回だーっと降りてくるだけの処理でも
その中の一部を外部コマンドとか関数にするでしょ?
再利用するとか、そこだけ実行できるようにするために。
957デフォルトの名無しさん
2020/03/22(日) 05:55:46.13ID:7aOor4nW あと「関数や処理が長くなったら分けるよね」という
技術的な話に対して「分ける」or「分けない」とは無関係な
「俺はシェルスクリプトで長い処理は作らない」という
個人的な話をごちゃまぜにしないでくれ
「分けるよね?」の答えにはなってないから。
技術的な話に対して「分ける」or「分けない」とは無関係な
「俺はシェルスクリプトで長い処理は作らない」という
個人的な話をごちゃまぜにしないでくれ
「分けるよね?」の答えにはなってないから。
958デフォルトの名無しさん
2020/03/22(日) 07:35:58.24ID:5UlsRo7e959デフォルトの名無しさん
2020/03/22(日) 07:52:15.98ID:7aOor4nW >>958
じゃあ何で分けるのさ?
じゃあ何で分けるのさ?
960デフォルトの名無しさん
2020/03/22(日) 09:08:29.58ID:c5TE3idF >どんな言語だって1つの関数が100行超えるようならやめるべきだし
を何度読んでも、そのとおりとしか?
を何度読んでも、そのとおりとしか?
961デフォルトの名無しさん
2020/03/22(日) 10:24:47.84ID:I5Su+SV6 GoogleのStyle Guideには100行超えるようなスクリプトを書いてるなら
今すぐもっと構造化された言語で書き直すべきって書いてる
>If you are writing a script that is more than 100 lines long,
>or that uses non-straightforward control flow logic,
>you should rewrite it in a more structured language now.
関数の長さじゃなくスクリプトの長さの話
似てるけど持ってる意味合いが違う
今すぐもっと構造化された言語で書き直すべきって書いてる
>If you are writing a script that is more than 100 lines long,
>or that uses non-straightforward control flow logic,
>you should rewrite it in a more structured language now.
関数の長さじゃなくスクリプトの長さの話
似てるけど持ってる意味合いが違う
962デフォルトの名無しさん
2020/03/22(日) 12:56:41.04ID:tFupwLj7 シェルスクリプトも十分構造化されてると思うんだけどねぇ。
まあ,Pythonとかに比べれば,メッソドや継承とかそういう概念が備わってない意味では低級だけど,
「シェルスクリプトで巨大なプログラムを書くべきでない理由」として
「シェルスクリプトは*構造的*でないから」ってのはちょっと頂けない。
シェルスクリプトには構造化プログラミングを支援する機能(函数定義,局所変数)が備わってる以上,
構造化されてないシェルスクリプトがあったならそれは書いた人間の責任であって,
もっと言うとそういうシェルスクリプトを書くような人間は,
Pythonであっても,用意されたオブジェクト指向の機能なんて使わずに,ひたすら手続き的なプログラムを書くだろう。
まあ,Pythonとかに比べれば,メッソドや継承とかそういう概念が備わってない意味では低級だけど,
「シェルスクリプトで巨大なプログラムを書くべきでない理由」として
「シェルスクリプトは*構造的*でないから」ってのはちょっと頂けない。
シェルスクリプトには構造化プログラミングを支援する機能(函数定義,局所変数)が備わってる以上,
構造化されてないシェルスクリプトがあったならそれは書いた人間の責任であって,
もっと言うとそういうシェルスクリプトを書くような人間は,
Pythonであっても,用意されたオブジェクト指向の機能なんて使わずに,ひたすら手続き的なプログラムを書くだろう。
963デフォルトの名無しさん
2020/03/22(日) 13:04:15.24ID:c5TE3idF964デフォルトの名無しさん
2020/03/22(日) 14:10:38.21ID:An20OwGu965デフォルトの名無しさん
2020/03/22(日) 14:27:24.29ID:Hw+To0D5 何を絡んでいるんだか
966デフォルトの名無しさん
2020/03/22(日) 14:32:07.41ID:Hw+To0D5 結論、初心者も視野に大いに入っている規約。ある意味初心者に合わせた
だから、100行についてあれこれ議論してもしょうがないよ、Googleにコード提供するわけでもなし変だと思うならふーんと無視だなw
だから、100行についてあれこれ議論してもしょうがないよ、Googleにコード提供するわけでもなし変だと思うならふーんと無視だなw
967デフォルトの名無しさん
2020/03/22(日) 15:21:02.01ID:I5Su+SV6 >>962
同じロジックでも行数は全然違ってくるよ
shやbashには型がないのと原始的エラーハンドリング機構しかないのが大きい
他にも高階関数がまともに書けないし
一般的な言語に用意されてる便利メソッドもないし
モジュール化機能も関数とファイル以外に無い
読みやすさ、メンテしやすさ、テストのしやすさの点から
シェルスクリプトの限界を認識して節度を持って使おうねってのが
Googleのガイドの意図だと思う
同じロジックでも行数は全然違ってくるよ
shやbashには型がないのと原始的エラーハンドリング機構しかないのが大きい
他にも高階関数がまともに書けないし
一般的な言語に用意されてる便利メソッドもないし
モジュール化機能も関数とファイル以外に無い
読みやすさ、メンテしやすさ、テストのしやすさの点から
シェルスクリプトの限界を認識して節度を持って使おうねってのが
Googleのガイドの意図だと思う
968デフォルトの名無しさん
2020/03/22(日) 15:21:37.48ID:I5Su+SV6 >>967
アンカ間違えた
アンカ間違えた
969デフォルトの名無しさん
2020/03/22(日) 15:48:56.43ID:c5TE3idF >>967
型がないのは他にも有るだろ
エラーハンドリングも例外がない言語はいくらでもある
高階関数はevalで関数をよびだすことができるので同等のことは出来る
メソッドはオブジェクト指向じゃないから関数として
外部コマンド=シェルスクリプトの関数なんだからたくさんある
モジュール化機能って関数とファイル以外に何が必要なんだ?
> シェルスクリプトの限界を認識して
その限界の理由がはっきり書かれてない。
読みやすさが悪い、メンテしやすさが悪い、テストのしやすさが悪い
という"結論"を言ってるが理由がない
型がないのは他にも有るだろ
エラーハンドリングも例外がない言語はいくらでもある
高階関数はevalで関数をよびだすことができるので同等のことは出来る
メソッドはオブジェクト指向じゃないから関数として
外部コマンド=シェルスクリプトの関数なんだからたくさんある
モジュール化機能って関数とファイル以外に何が必要なんだ?
> シェルスクリプトの限界を認識して
その限界の理由がはっきり書かれてない。
読みやすさが悪い、メンテしやすさが悪い、テストのしやすさが悪い
という"結論"を言ってるが理由がない
970デフォルトの名無しさん
2020/03/22(日) 16:56:26.48ID:I5Su+SV6 >>969
>型がないのは他にも有るだろ
例えば?
>エラーハンドリングも例外がない言語はいくらでもある
最近の言語で例外もパターンマッチもないのはGoくらい
Goはそれもあって同じことする場合でも他言語よりも行数が多くなりがち
それでも型と多重代入があるからシェルスクリプトよりはマシ
>高階関数はevalで関数をよびだすことができるので同等のことは出来る
それがまともに書けるという認識なら何を言っても無駄っぽいね
どうぞシェルスクリプトで頑張ってください
>型がないのは他にも有るだろ
例えば?
>エラーハンドリングも例外がない言語はいくらでもある
最近の言語で例外もパターンマッチもないのはGoくらい
Goはそれもあって同じことする場合でも他言語よりも行数が多くなりがち
それでも型と多重代入があるからシェルスクリプトよりはマシ
>高階関数はevalで関数をよびだすことができるので同等のことは出来る
それがまともに書けるという認識なら何を言っても無駄っぽいね
どうぞシェルスクリプトで頑張ってください
971デフォルトの名無しさん
2020/03/22(日) 17:17:48.98ID:I7uR5y3I >>969
機能がある/ない、できる/できないの2択の話でなくて、規模が大きくなったり構造が複雑になったらそれに適した使いやすい言語を使うと良いというだけの話だろうに。
機能がある/ない、できる/できないの2択の話でなくて、規模が大きくなったり構造が複雑になったらそれに適した使いやすい言語を使うと良いというだけの話だろうに。
972デフォルトの名無しさん
2020/03/22(日) 17:52:07.84ID:9SijoV71 シェルスクリプトの可読性・保守性について問題ないと思ってる人ってシェルスクリプト以外でコード書いてないのだろうとしか思えない
973デフォルトの名無しさん
2020/03/22(日) 18:47:11.03ID:Hw+To0D5 誰もそんなこと言ってないと思うけど
974デフォルトの名無しさん
2020/03/22(日) 22:29:55.52ID:c5TE3idF975デフォルトの名無しさん
2020/03/22(日) 22:31:28.16ID:c5TE3idF976デフォルトの名無しさん
2020/03/22(日) 23:46:42.00ID:I5Su+SV6977デフォルトの名無しさん
2020/03/23(月) 00:00:17.14ID:FfORFm5F >>976
配列とか数値なら、シェルスクリプトにもありますよw
man basnより
declare [-aAfFgilrtux] [-p] [name[=value] ...]
-a 各 name は配列変数です (前述の 配列 を参照)。
-A 各 name は連想配列変数です (前述の 配列 を参照)。
-i 変数を整数として扱います。
配列とか数値なら、シェルスクリプトにもありますよw
man basnより
declare [-aAfFgilrtux] [-p] [name[=value] ...]
-a 各 name は配列変数です (前述の 配列 を参照)。
-A 各 name は連想配列変数です (前述の 配列 を参照)。
-i 変数を整数として扱います。
レス数が950を超えています。1000を超えると書き込みができなくなります。
ニュース
- 「脅迫だ」国分太一に同情論 音声データ削除要求など日テレの対応を疑問視する声ネットに噴出「それこそコンプラ違反では」 [muffin★]
- 中国と対話で良い関係つくるのが責任と首相 ★4 [少考さん★]
- 【国際法を無視】日本での「中華人民共和国に台湾問題を論じる資格なし」との声に 中国外交部が厳しく反論… [BFU★]
- 生クリームだけの真っ白なクリスマスケーキ 大手メーカーが販売、その理由は…フルーツなしで価格は半額以下に ★3 [おっさん友の会★]
- 【学術団体】高市総理の台湾有事に関する発言を巡り、学者らが日中関係修復を求める緊急声明を発表… ★2 [BFU★]
- 首相答弁「スパイ防止法、外国代理人登録法、ロビー活動公開法などについて速やかに法案を策定する」 [1ゲットロボ★]
- 【実況】博衣こよりのえちえちSSholox4周年切り抜き鑑賞🧪★3
- 【悲報】 高速道路で乗用車とイノシシがサイド・バイ・サイドで走行 [875588627]
- 高市のせいでこれから国際会議で台湾を「中国台北」と呼称しないと行けなくなってしまった模様 [709039863]
- 【悲報】野田佳彦、高市さんの『存立危機事態』答弁を撤回 [519511584]
- 【速報】高市批判の石破、袋叩きにあうwwwwwwwwwwwコメント1万件 [308389511]
- 【貧困悲報】鮭やウナギを食えなくなったジャップ、「ナマズ」を食べ始める😢 [616817505]
