シェルスクリプトに関する総合スレッドです。
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。
シェルスクリプト総合 その31
https://mevius.5ch.net/test/read.cgi/tech/1565446670/
探検
シェルスクリプト総合 その32
■ このスレッドは過去ログ倉庫に格納されています
2019/10/25(金) 00:08:45.53ID:6btPTvif
663デフォルトの名無しさん
2020/02/18(火) 15:45:01.04ID:fdBjlYYo IT系の仕事してるけどアプリ作ってるときはコンパイルは普通だった
でもインフラの仕事をするとシェルスクリプト多数だった
シェルスクリプト作ってる人たちはコンパイルの概念が分からないらしかった
プログラムはビルドしてリリースしてとソースと実行ファイルの管理が面倒だけど
シェルスクリプトって即物的なのがいい
でもインフラの仕事をするとシェルスクリプト多数だった
シェルスクリプト作ってる人たちはコンパイルの概念が分からないらしかった
プログラムはビルドしてリリースしてとソースと実行ファイルの管理が面倒だけど
シェルスクリプトって即物的なのがいい
664デフォルトの名無しさん
2020/02/18(火) 17:27:39.45ID:X8dqmLc9 1 2
3 4
みたいなhoge.txtがあって
cat hoge.txt | sed "s/\t/,/g" > piyo.csv
ってやってもhogeのままなんですけど
cat hoge.txt | tr " \t" "," > piyo.csv
ってやると上手くいきました、mac環境なんですけど
何が原因なのか分かりません…
sedの置換対象に数字を入れた場合は上手くいきました
3 4
みたいなhoge.txtがあって
cat hoge.txt | sed "s/\t/,/g" > piyo.csv
ってやってもhogeのままなんですけど
cat hoge.txt | tr " \t" "," > piyo.csv
ってやると上手くいきました、mac環境なんですけど
何が原因なのか分かりません…
sedの置換対象に数字を入れた場合は上手くいきました
665デフォルトの名無しさん
2020/02/18(火) 17:30:18.44ID:hjlsDnk2 1 と 2 の間にあるのがスペースなんじゃ…
666デフォルトの名無しさん
2020/02/18(火) 20:22:18.38ID:wp4bvOJX667デフォルトの名無しさん
2020/02/18(火) 20:27:51.93ID:VB0SzzBs >>664
mac の sed は \t をタブ文字として扱わないらしいね
https://stackoverflow.com/questions/5398395/how-can-i-insert-a-tab-character-with-sed-on-os-x/5398453#5398453
sed "s/$(printf '\t')/,/g" はどうかな
printf も \t 非対応なんてことはさすがに無いと思うけど
mac の sed は \t をタブ文字として扱わないらしいね
https://stackoverflow.com/questions/5398395/how-can-i-insert-a-tab-character-with-sed-on-os-x/5398453#5398453
sed "s/$(printf '\t')/,/g" はどうかな
printf も \t 非対応なんてことはさすがに無いと思うけど
668デフォルトの名無しさん
2020/02/18(火) 20:33:06.70ID:hjlsDnk2 tr " \t" "," となっていてスペースが含まれているから
上手くいっているんじゃないかと
上手くいっているんじゃないかと
669デフォルトの名無しさん
2020/02/18(火) 21:52:28.55ID:8C0JMYsF 665~668の方まで皆さんありがとうございます
とりあえず痴漢の成功例を○、上手くいかなかったのを×として
× tr " " ","
○ tr "\t" ","
× sed "s/\t/,/g" (\tを\\tに変える、クオーテーションを変えるなどしても同様)
○ sed "s/$(printf '\t')/,/g"
という感じでした。
macとlinuxでオプション違うのは経験で知ってたんですが正規表現にまで
関わってくるんですね…良い事を教えていただいてありがとうございます。
とりあえず痴漢の成功例を○、上手くいかなかったのを×として
× tr " " ","
○ tr "\t" ","
× sed "s/\t/,/g" (\tを\\tに変える、クオーテーションを変えるなどしても同様)
○ sed "s/$(printf '\t')/,/g"
という感じでした。
macとlinuxでオプション違うのは経験で知ってたんですが正規表現にまで
関わってくるんですね…良い事を教えていただいてありがとうございます。
670デフォルトの名無しさん
2020/02/18(火) 22:18:45.81ID:ObTpNy6/ macならgnu-sedをインストールしてそっち使ったほうが良い
671デフォルトの名無しさん
2020/02/19(水) 11:18:51.97ID:nP6c4IYT 痴漢の成功例っていやだなw
672デフォルトの名無しさん
2020/02/19(水) 12:03:18.50ID:pMNWrift 気が付かなかったww
673デフォルトの名無しさん
2020/02/21(金) 06:21:58.42ID:A/822pua $ ed -s <(seq 3) <<< $'3m1\n,p'
1
3
2
$ ed -s <(seq 3) <<< '3m1\n,p'
?
これでコマンドラインからedが使えるけどこの$ってどんな効果が?
付けないとこの通り表示されないし
1
3
2
$ ed -s <(seq 3) <<< '3m1\n,p'
?
これでコマンドラインからedが使えるけどこの$ってどんな効果が?
付けないとこの通り表示されないし
674デフォルトの名無しさん
2020/02/21(金) 07:58:16.90ID:0dzJ+7kH675デフォルトの名無しさん
2020/02/21(金) 14:48:04.29ID:A/822pua676デフォルトの名無しさん
2020/02/22(土) 16:39:03.63ID:C/dFKPoq kshのリポジトリのmasterが3400ぐらいあったコミットが13に減っていてワロタw
677デフォルトの名無しさん
2020/02/25(火) 12:18:34.54ID:S19Y4jrS grepの-eオプションみたく複数回指定できるオプション引数って
シェルスクリプトでどうやって処理するのが一般的なんかな。
getopts(1)の例
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/getopts.html#tag_20_54_17
とかに載ってるような引数付き-bオプションに対して変数bflag=1, bval="$OPTARG"にする方法だと
最後に出現した-b XXXしか感知できないよね。
-b XX1 -b XX2 -b XX3
↑こういうコマンドライン引数があったときに-bオプションに対する引数を全部認識するようにしたい。
そういう処理をしているスクリプトのソースへのリンクとか教えてもらえるとすごく助かる。
シェルスクリプトでどうやって処理するのが一般的なんかな。
getopts(1)の例
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/getopts.html#tag_20_54_17
とかに載ってるような引数付き-bオプションに対して変数bflag=1, bval="$OPTARG"にする方法だと
最後に出現した-b XXXしか感知できないよね。
-b XX1 -b XX2 -b XX3
↑こういうコマンドライン引数があったときに-bオプションに対する引数を全部認識するようにしたい。
そういう処理をしているスクリプトのソースへのリンクとか教えてもらえるとすごく助かる。
678デフォルトの名無しさん
2020/02/25(火) 12:53:16.03ID:5KSIeSvf 出現するたびになにかやればいいだけじゃん
679デフォルトの名無しさん
2020/02/25(火) 14:13:23.37ID:oSeHo6cg >>677
一般的かどうか知らないけど配列に入れて要素の数だけループさせてる
別のコマンドに渡すことが大半なのでループ内ではコマンド文字列を生成して実行はループの外でやる
while getopts “e:” opt; do
case "$opt" in
“e”) strings+=("$OPTARG");;
esac
done
shift $(($OPTIND - 1))
for value in "${strings[@]}"; do
…
done
一般的かどうか知らないけど配列に入れて要素の数だけループさせてる
別のコマンドに渡すことが大半なのでループ内ではコマンド文字列を生成して実行はループの外でやる
while getopts “e:” opt; do
case "$opt" in
“e”) strings+=("$OPTARG");;
esac
done
shift $(($OPTIND - 1))
for value in "${strings[@]}"; do
…
done
680デフォルトの名無しさん
2020/02/25(火) 15:00:07.73ID:mMwfySZI bash依存は甘え
681デフォルトの名無しさん
2020/02/25(火) 15:30:00.20ID:K+FIgRaj682デフォルトの名無しさん
2020/02/25(火) 15:45:41.88ID:K+FIgRaj 今更だけど、試しにNetBSDのgrepのソースコードを覗いてみたら、pattern[]配列に格納してたわ。
POSIXシェルみたいな配列に対応してないシェルでも0x1Fユニット区切り文字とか使えばいいかな。
POSIXシェルみたいな配列に対応してないシェルでも0x1Fユニット区切り文字とか使えばいいかな。
683デフォルトの名無しさん
2020/02/25(火) 17:02:15.34ID:eOOTHTW4 全てのシェルに配列はあるだろ? $@を使えばいいんだよ
あとはqiitaででも探せ。答えはそこにある。
あとはqiitaででも探せ。答えはそこにある。
684デフォルトの名無しさん
2020/02/25(火) 17:24:31.11ID:S19Y4jrS685デフォルトの名無しさん
2020/02/25(火) 17:25:41.11ID:S19Y4jrS サブシェルで処理すれば$@は引き継がれないから影響ないけど
そうすると今度は肝心要の、現在処理しているコマンドライン引数を全く参照できなくなる。
そうすると今度は肝心要の、現在処理しているコマンドライン引数を全く参照できなくなる。
686デフォルトの名無しさん
2020/02/25(火) 17:46:16.45ID:eOOTHTW4 サブシェルなんかいらねーだろ
関数使えよ
関数使えよ
687デフォルトの名無しさん
2020/02/25(火) 22:33:40.09ID:S19Y4jrS >>686
頭悪くて恥ずかしい限りだが、
スクリプトの例を書いてもらえないか。
excmd -a XXX -a YYY -a ZZZ
みたいなコマンドライン引数を解釈して、
全部読み切った後に-aオプションに対するオプション引数をそれぞれ取得できるっていう。
全部読み切った後ってのは、getoptやらで最後のオプションまで読み切って、
引数関連のエラーがないことを確かめてからってことね。
「-aオプションの出現を感知するたびに標準出力に出す」みたいなのじゃなく。
頭悪くて恥ずかしい限りだが、
スクリプトの例を書いてもらえないか。
excmd -a XXX -a YYY -a ZZZ
みたいなコマンドライン引数を解釈して、
全部読み切った後に-aオプションに対するオプション引数をそれぞれ取得できるっていう。
全部読み切った後ってのは、getoptやらで最後のオプションまで読み切って、
引数関連のエラーがないことを確かめてからってことね。
「-aオプションの出現を感知するたびに標準出力に出す」みたいなのじゃなく。
688デフォルトの名無しさん
2020/02/25(火) 22:48:26.39ID:8Uixj76j689デフォルトの名無しさん
2020/02/26(水) 08:09:52.20ID:vrfGqddo >>688
?
-aの位置の次にある引数を取得するってこと?
でもそうすると
-bcaXXX
↑こういうときはどう解析するの?(-b,-cは引数を取らないオプション)
この形式のオプションもPOSIXでは許可されてるから
当然解析できなければならないけど。
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html
?
-aの位置の次にある引数を取得するってこと?
でもそうすると
-bcaXXX
↑こういうときはどう解析するの?(-b,-cは引数を取らないオプション)
この形式のオプションもPOSIXでは許可されてるから
当然解析できなければならないけど。
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html
690デフォルトの名無しさん
2020/02/26(水) 08:25:40.38ID:iwwM4ZEx >>689
引数処理にこだわり始めるとスクリプト実行して引数解析終わるまで時間がかかるようになって
使い物にならなくなるので複雑な記法は全部捨てたわ
POSIXで許可されているから実装しなきゃならないというならPOSIXを窓から投げ捨てるべき
引数処理にこだわり始めるとスクリプト実行して引数解析終わるまで時間がかかるようになって
使い物にならなくなるので複雑な記法は全部捨てたわ
POSIXで許可されているから実装しなきゃならないというならPOSIXを窓から投げ捨てるべき
691デフォルトの名無しさん
2020/02/26(水) 08:29:52.36ID:kXv4PxDr692デフォルトの名無しさん
2020/02/26(水) 09:28:16.44ID:9H3dDcdo bash によるオプション解析 - Qiita
https://qiita.com/b4b4r07/items/dcd6be0bb9c9185475bb
getoptsの存在すら知らずに横着して=~を使ってすまんな
オプションの集約ってこうも面倒だったのね
https://qiita.com/b4b4r07/items/dcd6be0bb9c9185475bb
getoptsの存在すら知らずに横着して=~を使ってすまんな
オプションの集約ってこうも面倒だったのね
693デフォルトの名無しさん
2020/02/26(水) 09:48:23.19ID:re2OdmIW timeoutで終了するプログラムの最後の1行だけを表示させたいどうするの?
694デフォルトの名無しさん
2020/02/26(水) 09:54:37.39ID:kXv4PxDr >>692
どの言語にもオプション解析用のライブラリがある理由が分かったろ?
どの言語にもオプション解析用のライブラリがある理由が分かったろ?
695デフォルトの名無しさん
2020/02/26(水) 11:26:08.87ID:vrfGqddo ちなみにgetoptsコマンドはPOSIXで定義されてるけど,実はPOSIXが定めるオプション書式に対応していないっていう。
まあOpenGroup側も「任意のオプション引数は歴史的な理由以外で使ってはならない」って言ってる訳だし
仕方無い部分もあるけど。
一方で複数回登場する引数付きオプションは,ちゃんと現行のアプリケーションでの使用も許可されているにもかかわらず
getopts自身はそういうオプションに対する便利な機能をなんら提供してない。
まあOpenGroup側も「任意のオプション引数は歴史的な理由以外で使ってはならない」って言ってる訳だし
仕方無い部分もあるけど。
一方で複数回登場する引数付きオプションは,ちゃんと現行のアプリケーションでの使用も許可されているにもかかわらず
getopts自身はそういうオプションに対する便利な機能をなんら提供してない。
696デフォルトの名無しさん
2020/02/26(水) 13:10:48.18ID:iFRpldfA >>695
任意のオプション引数ってどういうもののことを言ってる?
任意のオプション引数ってどういうもののことを言ってる?
697デフォルトの名無しさん
2020/02/26(水) 13:41:46.61ID:vrfGqddo >>696
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html
ここを読め…と突き放すのはあんまりなんで説明すると
“optional option-argument”---任意のオプション引数っていうのは,
当該オプションのあとにそのオプションに対する(一つの)引数が指定されてもされなくてもいいような
オプションのこと。
manページの「書式」節で
somecmd -o[arg]
みたいに書かれている場合が該当する。
これは
somecmd -o
の時は「オプション-oが引数なしで指定された」と解釈し
somecmd -oXXX
の時は「オプション-oが引数XXXで指定された」と解釈,
somecmd -o XXX
のときは「オプション-oと,(それとは直接関係ない)被演算子XXXが指定された」と解釈する
という決まりになってる。
なおPOSIXでは規程されてないけど,長いオプションの場合は
任意のオプション引数を指定したければオプションとオプション引数を=で結ぶのが通例みたい。
--long-opt=XXX
↑こういう感じ。
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html
ここを読め…と突き放すのはあんまりなんで説明すると
“optional option-argument”---任意のオプション引数っていうのは,
当該オプションのあとにそのオプションに対する(一つの)引数が指定されてもされなくてもいいような
オプションのこと。
manページの「書式」節で
somecmd -o[arg]
みたいに書かれている場合が該当する。
これは
somecmd -o
の時は「オプション-oが引数なしで指定された」と解釈し
somecmd -oXXX
の時は「オプション-oが引数XXXで指定された」と解釈,
somecmd -o XXX
のときは「オプション-oと,(それとは直接関係ない)被演算子XXXが指定された」と解釈する
という決まりになってる。
なおPOSIXでは規程されてないけど,長いオプションの場合は
任意のオプション引数を指定したければオプションとオプション引数を=で結ぶのが通例みたい。
--long-opt=XXX
↑こういう感じ。
698デフォルトの名無しさん
2020/02/26(水) 13:46:00.81ID:Z7ha8duC >>697
ああ、OKOK、ちゃんと分かってるね
ああ、OKOK、ちゃんと分かってるね
699デフォルトの名無しさん
2020/02/26(水) 15:55:24.01ID:vrfGqddo >>698
分かってもらえたみたいでよかった。
分かってもらえたみたいでよかった。
700デフォルトの名無しさん
2020/02/26(水) 23:24:46.41ID:iwwM4ZEx >>691
使い物にならんから外部コマンドなし縛りにして、その結果複雑な書き方捨てたって事なんですが...
個人的には -help が --help の書き間違いとして拾ってくれずに -h -e -l -p になるのが気に食わんのですよ
使い物にならんから外部コマンドなし縛りにして、その結果複雑な書き方捨てたって事なんですが...
個人的には -help が --help の書き間違いとして拾ってくれずに -h -e -l -p になるのが気に食わんのですよ
701デフォルトの名無しさん
2020/02/27(木) 00:12:01.62ID:nCyLO+2A Ruby の、OptionParser では、
require 'optparse'
ARGV.replace %w(-e abc -e あ)
opts = { }
ARGV.options do |o|
o.on( "-e パターン", "絞り込む" ) { |x|
( opts[ :pattern ] ||= [ ] ).push x } # 配列に追加する
o.parse!
end
p opts #=> { :pattern=>["abc", "あ"] }
require 'optparse'
ARGV.replace %w(-e abc -e あ)
opts = { }
ARGV.options do |o|
o.on( "-e パターン", "絞り込む" ) { |x|
( opts[ :pattern ] ||= [ ] ).push x } # 配列に追加する
o.parse!
end
p opts #=> { :pattern=>["abc", "あ"] }
702デフォルトの名無しさん
2020/02/27(木) 01:10:41.62ID:WuLbJO/f >>700
その一文字オプションの連結に対応しなければいいだけじゃん
その一文字オプションの連結に対応しなければいいだけじゃん
703デフォルトの名無しさん
2020/02/27(木) 10:15:09.64ID:1d0gnp8c704700
2020/02/28(金) 00:12:31.43ID:sbmuwMBZ706デフォルトの名無しさん
2020/02/28(金) 21:07:42.16ID:11SJpN8G > 個人的には -help が --help の書き間違いとして拾ってくれずに
-help が --help の書き間違いとして拾ってくれるものなんてある?
-help が --help の書き間違いとして拾ってくれるものなんてある?
707デフォルトの名無しさん
2020/02/28(金) 21:16:46.81ID:9ZnEM/be >>700
> 使い物にならんから外部コマンドなし縛りにして、その結果複雑な書き方捨てたって事なんですが...
外部コマンドを使うと遅くなって使い物にならないから、
外部コマンドなし縛りで自分でパーサーを実装すればいいだけ。
それができないから「下手すぎw」と言ってるわけです。
まあ自分で作れないなら仕方ないけどw
> 使い物にならんから外部コマンドなし縛りにして、その結果複雑な書き方捨てたって事なんですが...
外部コマンドを使うと遅くなって使い物にならないから、
外部コマンドなし縛りで自分でパーサーを実装すればいいだけ。
それができないから「下手すぎw」と言ってるわけです。
まあ自分で作れないなら仕方ないけどw
708デフォルトの名無しさん
2020/02/29(土) 08:02:48.75ID:A8pIm3Di うわぁー
709デフォルトの名無しさん
2020/02/29(土) 08:10:25.23ID:wnu08hYu 外部コマンドを使おうが使うまいが、パーサーのアルゴリズムに大差ないだろ?
今まで外部コマンドを使ってパースしてたなら、
それを外部コマンドを使わずにパースするだけじゃん
何が難しいというのか?
今まで外部コマンドを使ってパースしてたなら、
それを外部コマンドを使わずにパースするだけじゃん
何が難しいというのか?
710700
2020/02/29(土) 09:04:49.63ID:toFJGN/1711デフォルトの名無しさん
2020/02/29(土) 09:27:10.60ID:Z90YN+Q9712デフォルトの名無しさん
2020/02/29(土) 13:13:04.89ID:IP0SEm6N なんか、車輪の再発明みたいなことになってるなw
713デフォルトの名無しさん
2020/02/29(土) 14:05:54.81ID:MM7sekhX getoptが使い物にならないんだから
作らないとしょうがない
作らないとしょうがない
714デフォルトの名無しさん
2020/03/01(日) 11:37:30.39ID:4tQoD8Fw × getopt
○ getopts
○ getopts
715デフォルトの名無しさん
2020/03/01(日) 12:51:34.60ID:4c8klxdl シェルスクリプト用のオプションパーサーって無いの?getopt/getopts以外で
716デフォルトの名無しさん
2020/03/01(日) 12:56:04.13ID:4tQoD8Fw717デフォルトの名無しさん
2020/03/01(日) 13:09:15.84ID:4c8klxdl >>716
それはgo製じゃん
それはgo製じゃん
718デフォルトの名無しさん
2020/03/01(日) 13:11:39.38ID:TiMroEot > docopts : the command line wrapper for bash.
719デフォルトの名無しさん
2020/03/01(日) 13:16:40.87ID:4c8klxdl bashってのもマイナス点だな
720デフォルトの名無しさん
2020/03/01(日) 14:02:23.94ID:4tQoD8Fw >>717
シェルスクリプト用のあれこれはすべてシェルスクリプト製じゃないといけない
なんて思ってないよな?
俺の知っているシェル・OS環境は,
sortやgrepみたいな外部コマンドどころか for文や変数処理みたいなシェルの内部動作も
みんなC言語で書かれてるんだが…
シェルスクリプト用のあれこれはすべてシェルスクリプト製じゃないといけない
なんて思ってないよな?
俺の知っているシェル・OS環境は,
sortやgrepみたいな外部コマンドどころか for文や変数処理みたいなシェルの内部動作も
みんなC言語で書かれてるんだが…
721デフォルトの名無しさん
2020/03/01(日) 14:28:49.88ID:4c8klxdl シェルスクリプト製じゃないと、1つのファイルに出来ないじゃん
722デフォルトの名無しさん
2020/03/01(日) 15:29:04.21ID:4tQoD8Fw × シェルスクリプト用のオプションパーサー
○ シェルスクリプト製のオプションパーサー
質問するときは明確な言葉で。
○ シェルスクリプト製のオプションパーサー
質問するときは明確な言葉で。
723デフォルトの名無しさん
2020/03/01(日) 16:13:34.61ID:DvIm3g7W ID:4c8klxdlの無能さ
724デフォルトの名無しさん
2020/03/02(月) 16:01:50.45ID:s5dtAso/ 外部コマンド使いなくないならBusyBoxみたいなの使うしかないよな。
725デフォルトの名無しさん
2020/03/02(月) 16:35:15.54ID:+7p1D0tE ビルトインコマンドでいいじゃん
726デフォルトの名無しさん
2020/03/02(月) 23:40:28.80ID:8PHDRupm -help が --help の書き間違いには、ならない。
-help は、h,e,l,p のオプションを連結した書き方で、文法的に正しいから
だから、オプションの連結を禁止すればよい
そうすれば、-h, -e, -l, -p みたいに、書かないといけないから、
-help は、絶対に間違いになるから、指摘できる
オプションの連結は、情報処理の教育を受けた社員を想定しているから、
勉強していないような素人には、難しすぎるw
-help は、h,e,l,p のオプションを連結した書き方で、文法的に正しいから
だから、オプションの連結を禁止すればよい
そうすれば、-h, -e, -l, -p みたいに、書かないといけないから、
-help は、絶対に間違いになるから、指摘できる
オプションの連結は、情報処理の教育を受けた社員を想定しているから、
勉強していないような素人には、難しすぎるw
727デフォルトの名無しさん
2020/03/03(火) 07:08:07.59ID:IKAJxND7 根本は中国人なのにマスコミも政府も絶対言わないし、
制限しない。
311の政府対応と同じ
政権変わっても変わらん
制限しない。
311の政府対応と同じ
政権変わっても変わらん
728デフォルトの名無しさん
2020/03/03(火) 07:53:58.76ID:4u1zxYLS 誤爆するガイキチ
729デフォルトの名無しさん
2020/03/03(火) 09:24:57.55ID:MNbayHdo >>726
情報処理の教育を受けた社員しか想定していないので問題ない
情報処理の教育を受けた社員しか想定していないので問題ない
730デフォルトの名無しさん
2020/03/03(火) 10:15:38.32ID:l2g6jfLd あとは自力で勉強探究心があるギーク向けだしな
731デフォルトの名無しさん
2020/03/03(火) 10:44:21.85ID:z64lrdXB find「せやな」
732デフォルトの名無しさん
2020/03/03(火) 12:18:09.49ID:3ukr+OhM 任意のオプション引数ってさ、
-help が -h elp って解釈されるよね?
-h -e -l -p とどうやって区別するの?
-help って書いた時どっちの意味になるの?
-help が -h elp って解釈されるよね?
-h -e -l -p とどうやって区別するの?
-help って書いた時どっちの意味になるの?
733デフォルトの名無しさん
2020/03/03(火) 12:32:47.35ID:yHaKKNdM あるスクリプトを作っていて、gitで管理しています。
~/src ← gitで管理
~/src/script.sh ← あるスクリプト
~/src/inc.sh ← あるスクリプトから読み込むライブラリ
script.sh から inc.sh を読み込むときに、
. ./inc.sh と書いています
script.sh をどのディレクトリからでも実行できるように
~/bin ディレクトリにシンボリックリンクを作成しました。
そして実行するとエラーになりました。
~/bin/inc.sh を読み込もうとしているからだと思いますが
いい解決方法はないでしょうか?
~/src ← gitで管理
~/src/script.sh ← あるスクリプト
~/src/inc.sh ← あるスクリプトから読み込むライブラリ
script.sh から inc.sh を読み込むときに、
. ./inc.sh と書いています
script.sh をどのディレクトリからでも実行できるように
~/bin ディレクトリにシンボリックリンクを作成しました。
そして実行するとエラーになりました。
~/bin/inc.sh を読み込もうとしているからだと思いますが
いい解決方法はないでしょうか?
734デフォルトの名無しさん
2020/03/03(火) 14:02:09.02ID:5O39EjRd735デフォルトの名無しさん
2020/03/03(火) 14:06:21.11ID:yHaKKNdM >>734
いろいろあって、そこはシンボリックじゃないとだめなんですよ
いろいろあって、そこはシンボリックじゃないとだめなんですよ
736デフォルトの名無しさん
2020/03/03(火) 17:07:25.01ID:FfxSBx1I737デフォルトの名無しさん
2020/03/03(火) 17:55:54.44ID:n9Ghdw3q >>733
inc.shも~/bin(や特定固定のとこ)にシンボリックリンクを置いてしまえ
とか
pathme="$(which "$0")";
[ -L "$pathme" ] && pathme="$(readlink "$pathme")"
. "$(dirname "$pathme")/inc.sh"
とか
inc.shも~/bin(や特定固定のとこ)にシンボリックリンクを置いてしまえ
とか
pathme="$(which "$0")";
[ -L "$pathme" ] && pathme="$(readlink "$pathme")"
. "$(dirname "$pathme")/inc.sh"
とか
738デフォルトの名無しさん
2020/03/03(火) 18:16:56.75ID:n9Ghdw3q >>733
>~/bin/inc.sh を読み込もうとしているからだと思いますが
./inc.sh とかいう相対パスは現在のワーキングディレクトリ/カレントディレクトリからのだよ。sourceも同じく特殊なことはせずに
"$(pwd)/inc.sh" を読み込もうとしているのだろう
>~/bin/inc.sh を読み込もうとしているからだと思いますが
./inc.sh とかいう相対パスは現在のワーキングディレクトリ/カレントディレクトリからのだよ。sourceも同じく特殊なことはせずに
"$(pwd)/inc.sh" を読み込もうとしているのだろう
739デフォルトの名無しさん
2020/03/03(火) 19:32:36.52ID:PcLjcySC >>737
やっぱりreadlink使うしか無いですかね。
シンボリックのシンボリックのシンボリックとか考慮すると
readlink -fが必要になるけど、macOS版だとgreadlinkじゃないと動かないし
そもそもgreadlinkが入ってないとか、その他のOSではどうなるの?とか。
そういう面倒なコードはライブラリにしたいけど、そのライブラリを読み込むのに苦労するというw
やっぱりreadlink使うしか無いですかね。
シンボリックのシンボリックのシンボリックとか考慮すると
readlink -fが必要になるけど、macOS版だとgreadlinkじゃないと動かないし
そもそもgreadlinkが入ってないとか、その他のOSではどうなるの?とか。
そういう面倒なコードはライブラリにしたいけど、そのライブラリを読み込むのに苦労するというw
740デフォルトの名無しさん
2020/03/03(火) 19:58:06.90ID:BC6YzT5m 後出しかよ
シンボリックのシンボリックのシンボリック
なら、三行書けばいいだけじゃん
やっぱりって何がやっぱりなんだか
シンボリックのシンボリックのシンボリック
なら、三行書けばいいだけじゃん
やっぱりって何がやっぱりなんだか
741デフォルトの名無しさん
2020/03/03(火) 20:06:11.93ID:BC6YzT5m pathme="$(command -v "$0")" || pathme="$0"
[ "$pathme" = "" ] && pathme="$0"
while [ -L "$pathme" ]; do
pathme="$(readlink "$pathme")"
done
. "$(dirname "$pathme")/inc.sh"
で、いいんじゃねえのかよぉ?なんでこんな簡単な対処も?と思うのでなんか穴があるか???
whichってPOSIXじゃなかったのね。煩そうだからそこも
[ "$pathme" = "" ] && pathme="$0"
while [ -L "$pathme" ]; do
pathme="$(readlink "$pathme")"
done
. "$(dirname "$pathme")/inc.sh"
で、いいんじゃねえのかよぉ?なんでこんな簡単な対処も?と思うのでなんか穴があるか???
whichってPOSIXじゃなかったのね。煩そうだからそこも
742デフォルトの名無しさん
2020/03/03(火) 20:07:32.72ID:BC6YzT5m あ、二行目はいらない。もしくは一行目の||の後ろ
743デフォルトの名無しさん
2020/03/03(火) 20:41:22.45ID:Lk6RorVj744デフォルトの名無しさん
2020/03/03(火) 20:47:57.53ID:BC6YzT5m なんかぐちぐち言っているけど、そんなこと対処すぐ自分でできるでしょなことをぐちぐちとという
ぐちぐち言う奴にはリアルでもムカつく沸点は低いのは確かだがなw
それと後出しなら当然のようにではなくて、すまんがが先にありがだろうに、何を当たり前のようにというのだな。リアルでもねw
ぐちぐち言う奴にはリアルでもムカつく沸点は低いのは確かだがなw
それと後出しなら当然のようにではなくて、すまんがが先にありがだろうに、何を当たり前のようにというのだな。リアルでもねw
745デフォルトの名無しさん
2020/03/03(火) 20:55:19.44ID:dHOuVCIc 意訳 謝罪しろ
746デフォルトの名無しさん
2020/03/03(火) 20:57:44.45ID:BC6YzT5m そう読めるなら、沸点は俺より低すぎだな
747デフォルトの名無しさん
2020/03/03(火) 20:59:54.63ID:FfxSBx1I つまり自分の沸点の低さは自覚してるって訳か。
ひとまず安心した。
ひとまず安心した。
748デフォルトの名無しさん
2020/03/03(火) 21:00:37.28ID:BC6YzT5m うむ。キレやすく冷めやすいなw
749デフォルトの名無しさん
2020/03/03(火) 21:01:39.37ID:UParEwxG 相手が何も考えてないと思ってるんだろうね。
そのやり方にはこういう問題があるって言ったら、
知ってるなら先にかけ!だもんな(苦笑)
そのやり方にはこういう問題があるって言ったら、
知ってるなら先にかけ!だもんな(苦笑)
750デフォルトの名無しさん
2020/03/03(火) 21:04:21.79ID:BC6YzT5m 読めてないな、全然w
のくせに絡みたいのね。苦笑がいい味付けだねw苦笑いするぞ
のくせに絡みたいのね。苦笑がいい味付けだねw苦笑いするぞ
751デフォルトの名無しさん
2020/03/03(火) 21:05:27.34ID:V11R45Nz 毎度ながら回答者に問題があるよな
/\___/\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
/\___/\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
752デフォルトの名無しさん
2020/03/03(火) 21:07:13.53ID:BC6YzT5m 何をそんなにひ弱なのかわからん...当事者でもないのに
>>740でそんなにダメージ受けるのか?一応ちゃんと回答してもいるんだがな。ひ弱すぎだろう
>>740でそんなにダメージ受けるのか?一応ちゃんと回答してもいるんだがな。ひ弱すぎだろう
753デフォルトの名無しさん
2020/03/03(火) 21:44:55.64ID:FfxSBx1I 弱い犬ほどなんとやら
754デフォルトの名無しさん
2020/03/03(火) 21:53:18.68ID:BC6YzT5m 本題ではない瑣末wなことに拘るねえ、延々と。その動機がわからん
そう言うことだよ、皮肉屋さん
そう言うことだよ、皮肉屋さん
755デフォルトの名無しさん
2020/03/04(水) 00:47:20.27ID:Hp65i7gp 煽るわけじゃないけどさ、シェル芸してる人って
アルゴリズムと呼べるようなコードを書ける人が少ない気がする
スクリプト言語で用意されてる便利な関数は使えても
その関数を自分で実装することはできないレベル
C言語で簡単な設定ファイルのパーサーも作れなさそう
アルゴリズムと呼べるようなコードを書ける人が少ない気がする
スクリプト言語で用意されてる便利な関数は使えても
その関数を自分で実装することはできないレベル
C言語で簡単な設定ファイルのパーサーも作れなさそう
756デフォルトの名無しさん
2020/03/04(水) 01:10:12.01ID:nNNW6i++ >>733
Ruby で言えば、
require './file' は、カレントディレクトリからの相対パスだけど、
require_relative './file' は、現在のファイルからの相対パスになる
つまり、require_relative './file' は、__dir__ + "/file"
__dir__ は、現在のソースファイル(__FILE__)のあるディレクトリ名を、正規化された絶対パスで返します。
シンボリックリンクも解決されます
Ruby で言えば、
require './file' は、カレントディレクトリからの相対パスだけど、
require_relative './file' は、現在のファイルからの相対パスになる
つまり、require_relative './file' は、__dir__ + "/file"
__dir__ は、現在のソースファイル(__FILE__)のあるディレクトリ名を、正規化された絶対パスで返します。
シンボリックリンクも解決されます
757701
2020/03/04(水) 01:34:09.01ID:nNNW6i++ >>732
Ruby の、OptionParser では、
-e オプションがあっても、-h オプションの引数、elp と解釈される
require 'optparse'
ARGV.replace %w(-help)
opts = { }
ARGV.options do |o|
o.on( "-e 引数", "引数" ) { |x| opts[ :e ] = x }
o.on( "-h 引数", "引数" ) { |x| opts[ :h ] = x }
o.parse!
end
p opts #=> {:h=>"elp"}
Ruby の、OptionParser では、
-e オプションがあっても、-h オプションの引数、elp と解釈される
require 'optparse'
ARGV.replace %w(-help)
opts = { }
ARGV.options do |o|
o.on( "-e 引数", "引数" ) { |x| opts[ :e ] = x }
o.on( "-h 引数", "引数" ) { |x| opts[ :h ] = x }
o.parse!
end
p opts #=> {:h=>"elp"}
758デフォルトの名無しさん
2020/03/04(水) 02:42:11.83ID:NN2zD8QV 知恵袋の最後の方で回答している気でいる雑種かな
759デフォルトの名無しさん
2020/03/04(水) 05:44:22.12ID:aHZx5rgw >>755
シェル芸ってなんの話?
シェル芸ってなんの話?
760デフォルトの名無しさん
2020/03/04(水) 08:01:55.10ID:1RejiZvB >>759
qiitaとかtwitterでシェル芸で検索するとわかるよ
難読化(笑)とか意味のないことを一行でやったすげーとか言ってる連中
シェルスクリプトにもプログラムを書くのに必要な機能はあるのに
一行(シェル芸)で書くか、さもなければ他の言語のライブラリを使うしかないって考えてる連中
シェルスクリプトで一行で書けなければ、他の言語を使って数行かけて書くが
そもそもシェルスクリプトで数行書けば、他の言語より短く実現できたりするのに
アルゴリズムを書く能力がないからそれができない。そういう奴らが好きな言葉がシェル芸
目的の機能がないと何も出来ない。プリミティブな機能を使って実現する思考能力が欠けている
qiitaとかtwitterでシェル芸で検索するとわかるよ
難読化(笑)とか意味のないことを一行でやったすげーとか言ってる連中
シェルスクリプトにもプログラムを書くのに必要な機能はあるのに
一行(シェル芸)で書くか、さもなければ他の言語のライブラリを使うしかないって考えてる連中
シェルスクリプトで一行で書けなければ、他の言語を使って数行かけて書くが
そもそもシェルスクリプトで数行書けば、他の言語より短く実現できたりするのに
アルゴリズムを書く能力がないからそれができない。そういう奴らが好きな言葉がシェル芸
目的の機能がないと何も出来ない。プリミティブな機能を使って実現する思考能力が欠けている
761デフォルトの名無しさん
2020/03/04(水) 08:06:58.23ID:Eb7SAM7+ このスレでのだろう
自分がただ嫌悪しているのをいきなり表明されても
自分がただ嫌悪しているのをいきなり表明されても
762デフォルトの名無しさん
2020/03/04(水) 08:12:50.48ID:1RejiZvB 新しい話題を始めただけやで
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【文春】元TOKIO・国分太一(51)「女性スタッフ2名への“わいせつ事案”」日テレ事情聴取の全貌が分かった! ★6 [Ailuropoda melanoleuca★]
- 【サッカー】UEFA-CL第5節 アーセナル×バイエルン、PSG×トッテナム、リバプール×PSV、オリンピアコス×レアル [久太郎★]
- 【金沢地裁】「風俗嬢に着せようと」南砺の高校で女子バレー部のユニホームを窃盗した男が説明 検察側、拘禁刑4年を求刑 [nita★]
- 【国際法を無視】日本での「中華人民共和国に台湾問題を論じる資格なし」との声に 中国外交部が厳しく反論… ★2 [BFU★]
- 【工作員】「X」のアカウント所在地公開機能が暴いた世論操作の実態 MAGA支持著名アカウントの多くが米国外から運営 日本にも波及 ★3 [ごまカンパチ★]
- 「脅迫だ」国分太一に同情論 音声データ削除要求など日テレの対応を疑問視する声ネットに噴出「それこそコンプラ違反では」★3 [muffin★]
- あかんなんか統合失調症みたいなのになる
- 【高市悲報】中国「ふにゃふにゃ言いながら、時が自然に解決するのを期待する—そんなジャップ流は決して通用しない」 [115996789]
- 足立区の男は何で実名報道されないの?
- 【悲報】撮り鉄が線路脇で撮影→運転手が降りて退去を促すもゴネて動かず電車が遅延→どっちが悪いか意見が真っ二つに [802034645]
- 【悲報】ゼレンスキー大統領、和平案に大筋合意 ホンコンみたいなウヨ芸人を大統領にするとこうなる [455031798]
- 神聖うんち帝国💩👑🏡
