シェルスクリプトに関する総合スレッドです。
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。
シェルスクリプト総合 その30
https://mevius.5ch.net/test/read.cgi/tech/1561989867/
シェルスクリプト総合 その31
レス数が950を超えています。1000を超えると書き込みができなくなります。
2019/08/10(土) 23:17:50.64ID:L+B8OP2P
863デフォルトの名無しさん
2019/10/07(月) 02:35:02.37ID:qQU+qyu9 そういう人はperlも必要なら入れるな。perlに限らず
864デフォルトの名無しさん
2019/10/07(月) 08:39:27.35ID:4YPUQoiH >>818 Python やっとけ。 perl は成仏させろ
865デフォルトの名無しさん
2019/10/07(月) 12:58:26.99ID:lSqRbxbA PerlはCの如くしぶとく残ってしまうと思うなあ。
866デフォルトの名無しさん
2019/10/07(月) 14:23:04.89ID:MItW4Ls8 sedやawkを忘れたんで代わりにperlを使うことが結構ある
867デフォルトの名無しさん
2019/10/07(月) 15:51:12.82ID:Wc5EJs/z perl -peをsed代わりに使ってるだけでperl自体には興味ないや
正規表現しか出番ないし使う機会がないんだよね
awkとかgrepとかどうせ他のコマンドも覚えなきゃならんし
正規表現しか出番ないし使う機会がないんだよね
awkとかgrepとかどうせ他のコマンドも覚えなきゃならんし
868デフォルトの名無しさん
2019/10/08(火) 14:32:15.36ID:C04IGCd6 >>865 残ることは残るだろうけど、誰からも見捨てられてる状態で生き延びていても学ぶ価値はない。
プログラミング言語人気トップ8、過去15年間で安定 - 例外はPython
2019/10/07 14:16 後藤大地
https://news.mynavi.jp/article/20191007-905781/
TIOBE Softwareから、2019年10月のTIOBE Programming Community Index (PCI)が公開された。
TIOBE PCIは、複数の検索エンジンの検索結果から、対象となるプログラミング言語がどれだけ話題に
なっているかをインデックス化したもの。(中略)
TIOBE Softwareは発表の中で、毎年新たなプログラミング言語が登場しているものの、TIOBE
Programming Community Indexのトップ8は過去15年間でほとんど変化していないと説明した。
Perlが消えてPythonに入れ替わったことや、Objective-Cが消えてSwiftに替わったというのが大きな
例外で、それ以外に大きな変動はないと指摘している。
ただし、プログラミング言語の分野に関してはいくつかの傾向があるとして、その例としてPHPやPerlから
Pythonへ移っていること、新しいプログラミング言語としてDart、Scala、Lua、Rust、Kotlin、TypeScript
などが人気上昇の渦中にあることなどを説明している。
10月TIOBE Programming Community Index / 円グラフ
https://news.mynavi.jp/article/20191007-905781/images/001.jpg
プログラミング言語人気トップ8、過去15年間で安定 - 例外はPython
2019/10/07 14:16 後藤大地
https://news.mynavi.jp/article/20191007-905781/
TIOBE Softwareから、2019年10月のTIOBE Programming Community Index (PCI)が公開された。
TIOBE PCIは、複数の検索エンジンの検索結果から、対象となるプログラミング言語がどれだけ話題に
なっているかをインデックス化したもの。(中略)
TIOBE Softwareは発表の中で、毎年新たなプログラミング言語が登場しているものの、TIOBE
Programming Community Indexのトップ8は過去15年間でほとんど変化していないと説明した。
Perlが消えてPythonに入れ替わったことや、Objective-Cが消えてSwiftに替わったというのが大きな
例外で、それ以外に大きな変動はないと指摘している。
ただし、プログラミング言語の分野に関してはいくつかの傾向があるとして、その例としてPHPやPerlから
Pythonへ移っていること、新しいプログラミング言語としてDart、Scala、Lua、Rust、Kotlin、TypeScript
などが人気上昇の渦中にあることなどを説明している。
10月TIOBE Programming Community Index / 円グラフ
https://news.mynavi.jp/article/20191007-905781/images/001.jpg
869デフォルトの名無しさん
2019/10/08(火) 15:00:13.27ID:dg9qT1Hg Perlはsedやawkと同じ位置で見ないとだめだよ
シェルスクリプトを書くときにsedやawkのように使う道具のひとつ
もちろんシェルスクリプトをまるごとPerlのスクリプトに置き換えてもいいけどそれは別の話
Perlを排除するのは武器を一つ捨てるようなもので損してるよ
シェルスクリプトを書くときにsedやawkのように使う道具のひとつ
もちろんシェルスクリプトをまるごとPerlのスクリプトに置き換えてもいいけどそれは別の話
Perlを排除するのは武器を一つ捨てるようなもので損してるよ
870デフォルトの名無しさん
2019/10/08(火) 15:03:58.28ID:4CpPhkv4 汎用言語としてはpython の時代に移ったかもしれないが
文字処理言語としてはいまだ現役
文字処理言語としてはいまだ現役
871デフォルトの名無しさん
2019/10/08(火) 15:16:45.62ID:wc9EJfFY872デフォルトの名無しさん
2019/10/08(火) 15:49:08.88ID:dg9qT1Hg 俺当然sedもawkも使えるんだけど?
awkで複雑になる処理をPerlで可読性高く楽に書いてるってだけ
あんたも使える道具をうまく選べばいいんでPerlを知らなくても気にするな
awkで複雑になる処理をPerlで可読性高く楽に書いてるってだけ
あんたも使える道具をうまく選べばいいんでPerlを知らなくても気にするな
873デフォルトの名無しさん
2019/10/08(火) 16:39:54.73ID:9VgyN7XE 「Perlの方が楽に書ける」なんていうのは個人の嗜好に依存してて,ほとんど無根拠に近い。
もしPerlの「素晴しさ」とやらを報しめたいのなら,もっと客観的な事実――導入率・実績云々――を提示したほうがいいよ。
尤も,俺に言わせればAWKのほうが〜Perlのほうが〜なんていう議論とも呼べない喧嘩それ自体くだらねぇけどな
もしPerlの「素晴しさ」とやらを報しめたいのなら,もっと客観的な事実――導入率・実績云々――を提示したほうがいいよ。
尤も,俺に言わせればAWKのほうが〜Perlのほうが〜なんていう議論とも呼べない喧嘩それ自体くだらねぇけどな
874デフォルトの名無しさん
2019/10/08(火) 17:07:54.66ID:uaD7+k1O >>872 sed もawk も使えるならPython を使えばいいじゃん。
お前がPythonを使えないだけだろ。
お前がPythonを使えないだけだろ。
875デフォルトの名無しさん
2019/10/08(火) 17:13:16.90ID:gh1TIWVl python使ってわざわざ長いコード書いてどうするの?
sed -e 's/ABC/XYZ/' file1.txt
python -c 'import sys,re; [print(re.sub("ABC","XYZ",l,1),end="") for l in sys.stdin]'
sed -e 's/ABC/XYZ/' file1.txt
python -c 'import sys,re; [print(re.sub("ABC","XYZ",l,1),end="") for l in sys.stdin]'
876デフォルトの名無しさん
2019/10/08(火) 18:40:06.69ID:4CpPhkv4 gnu sed なら -e すら省けるんだよな
877デフォルトの名無しさん
2019/10/08(火) 18:40:15.32ID:gO+Oxfwr こうして宗教戦争が始まったのです。
878デフォルトの名無しさん
2019/10/08(火) 19:07:13.65ID:/hvysQLZ pythonはワンラインにはあまり向かんのは同意。
フリーフォーマットじゃないんで当たり前といえば当たり前か。
フリーフォーマットじゃないんで当たり前といえば当たり前か。
879デフォルトの名無しさん
2019/10/08(火) 19:30:38.22ID:vS76WaY3 宗教戦争は自分の信じるものが正しく、それ以外は認めないという非寛容が原因で始まる
880デフォルトの名無しさん
2019/10/09(水) 02:18:53.91ID:CaMm18My python ワンライナーに挑戦 〜 初心者のお勉強 m(_ _)m - Qiita
https://qiita.com/wyamamo/items/667c79db7edbaa9a46a7
闇Pythonista入門(Pythonワンライナーのテクニック集) - Qiita
https://qiita.com/cocuh/items/37bfdc0f24750127e7d3
杓子定規にするからこうなる
知恵比べはまた別の課題だろうに
https://qiita.com/wyamamo/items/667c79db7edbaa9a46a7
闇Pythonista入門(Pythonワンライナーのテクニック集) - Qiita
https://qiita.com/cocuh/items/37bfdc0f24750127e7d3
杓子定規にするからこうなる
知恵比べはまた別の課題だろうに
881デフォルトの名無しさん
2019/10/11(金) 19:00:05.85ID:QtmRuluN case $value in
*-*=*-*)
esac
こんなふうに、*が複数ある場合の動きとかちゃんと仕様化されてるの
どのシェルでも同じように動く?
*-*=*-*)
esac
こんなふうに、*が複数ある場合の動きとかちゃんと仕様化されてるの
どのシェルでも同じように動く?
882デフォルトの名無しさん
2019/10/11(金) 19:51:09.99ID:5TKzffM3 「されてるの?」
なのか
「されてるの(だ)」
なのか。
なのか
「されてるの(だ)」
なのか。
883デフォルトの名無しさん
2019/10/11(金) 22:19:25.99ID:EZwTHuUV884デフォルトの名無しさん
2019/10/12(土) 11:56:42.38ID:6fabclhr >>883
意味がわからん
abbb 、という文字に対して、a*b はマッチするのが正しいの?
aに続く残りのbは*で全部消費されるんじゃないの?
$ sh -c 'case "a-b-c-b-c-b-c" in (a*b*c) echo ok; esac'
$ sh -c 'case "a-b-c-b-c-b-c" in (a*b*c*b*c) echo ok; esac'
$ sh -c 'case "a-b-c-b-c-b-c" in (a*b*c*b*c*b*c) echo ok; esac'
すべてokってでる
どういうアルゴリズムなのかわからない
意味がわからん
abbb 、という文字に対して、a*b はマッチするのが正しいの?
aに続く残りのbは*で全部消費されるんじゃないの?
$ sh -c 'case "a-b-c-b-c-b-c" in (a*b*c) echo ok; esac'
$ sh -c 'case "a-b-c-b-c-b-c" in (a*b*c*b*c) echo ok; esac'
$ sh -c 'case "a-b-c-b-c-b-c" in (a*b*c*b*c*b*c) echo ok; esac'
すべてokってでる
どういうアルゴリズムなのかわからない
885デフォルトの名無しさん
2019/10/12(土) 13:05:32.76ID:19ZHiYan Perlの正規表現なら最長マッチがデフォ
886デフォルトの名無しさん
2019/10/12(土) 17:15:42.03ID:1KIHwFcK IPアドレスもgreedyが基本だな。
887デフォルトの名無しさん
2019/10/13(日) 14:15:24.81ID:wtTHifIn ワイルドカードもだよね
888デフォルトの名無しさん
2019/10/15(火) 20:13:38.52ID:tkdZ32xn889デフォルトの名無しさん
2019/10/16(水) 03:31:59.04ID:Pvq8peJ9 >>888
グロ
グロ
890デフォルトの名無しさん
2019/10/16(水) 08:08:38.68ID:9/jaba51 変数名を変数で指定できるのは欠陥じゃねえ
891デフォルトの名無しさん
2019/10/17(木) 13:11:40.29ID:huR1Dm0j はー、すげー。yashの実装に感動した
getopts "ab" OPT -ab
echo "$OPT $OPTIND" # => a 1:2
getopts "ab" OPT -ab
echo "$OPT $OPTIND" # => b 1:3
getopts "ab" OPT -ab # exit status = 1
echo "$OPT $OPTIND" # => ? 2
getopts "ab" OPT -ab
echo "$OPT $OPTIND" # => a 1:2
getopts "ab" OPT -ab
echo "$OPT $OPTIND" # => b 1:3
getopts "ab" OPT -ab # exit status = 1
echo "$OPT $OPTIND" # => ? 2
892デフォルトの名無しさん
2019/10/17(木) 16:55:00.31ID:PM8kIYTO if ls "*.txt" > /dev/null 2>&1
then
echo "OK"
else
echo "NG"
fi
まったくうまくいかない
なぜ単なるファイルの存在確認だけにこんな苦労するのか
then
echo "OK"
else
echo "NG"
fi
まったくうまくいかない
なぜ単なるファイルの存在確認だけにこんな苦労するのか
893デフォルトの名無しさん
2019/10/17(木) 17:04:24.98ID:z1/RyPhF ファイルの存在確認なら、-fを使えばいいだろ?
894デフォルトの名無しさん
2019/10/17(木) 17:05:16.55ID:e7ZwLQTq # # ls *txt && echo ok || echo bad
ls: '*txt' にアクセスできません: No such file or directory
bad
# # touch foo.txt
# # ls *txt && echo ok || echo bad
foo.txt
ok
こんな要領か?
ls: '*txt' にアクセスできません: No such file or directory
bad
# # touch foo.txt
# # ls *txt && echo ok || echo bad
foo.txt
ok
こんな要領か?
895デフォルトの名無しさん
2019/10/17(木) 17:05:47.88ID:z1/RyPhF あ、ディレクトリに *.txt があるかどうかってことか?
896デフォルトの名無しさん
2019/10/17(木) 17:08:50.43ID:PM8kIYTO >>893
ところがワイルドカード使うと途端に何も引っかからなくなる
ところがワイルドカード使うと途端に何も引っかからなくなる
897デフォルトの名無しさん
2019/10/17(木) 17:09:26.66ID:PM8kIYTO >>895
そうです
そうです
898デフォルトの名無しさん
2019/10/17(木) 17:10:05.98ID:z1/RyPhF getopts vs getopt だけどさ、
BSDにおいてgetoptのメリットって何?
BSD版のgetoptはロングオプションに対応してないし、
引数にスペースが入ったらうまく行かないし
使い勝手悪いと思うんだが。
もしかして最初に作られたのがgetoptで
それを改良してgetoptsがシェルビルトインとして作られた。
(その後GNU版getoptが改良され、getoptsよりも便利になった)
という流れだったりするの?
BSDにおいてgetoptのメリットって何?
BSD版のgetoptはロングオプションに対応してないし、
引数にスペースが入ったらうまく行かないし
使い勝手悪いと思うんだが。
もしかして最初に作られたのがgetoptで
それを改良してgetoptsがシェルビルトインとして作られた。
(その後GNU版getoptが改良され、getoptsよりも便利になった)
という流れだったりするの?
899デフォルトの名無しさん
2019/10/17(木) 17:10:16.84ID:e7ZwLQTq 普通のプログラミング言語と違って
シェルスクリプトはブーリアンの分岐は可能なら
if else 使うよりも && || が見やすく良いと思う
シェルスクリプトはブーリアンの分岐は可能なら
if else 使うよりも && || が見やすく良いと思う
900デフォルトの名無しさん
2019/10/17(木) 17:12:52.81ID:PM8kIYTO901デフォルトの名無しさん
2019/10/17(木) 17:13:24.29ID:z1/RyPhF >>896
アスタリスクを使うと、シェルが解釈して、
例えば、 ls * だと、 ls file1 file2 file3 file4 って実行したのと同じことになるんだぞ。
lsコマンドの中からはアスタリスクが使われてるかどうかなんてわからない。
そしてダブルクォートで括ると、lsコマンドの中から引数は "*" という文字列が渡されたようになるんだよ。
アスタリスクを使うと、シェルが解釈して、
例えば、 ls * だと、 ls file1 file2 file3 file4 って実行したのと同じことになるんだぞ。
lsコマンドの中からはアスタリスクが使われてるかどうかなんてわからない。
そしてダブルクォートで括ると、lsコマンドの中から引数は "*" という文字列が渡されたようになるんだよ。
902デフォルトの名無しさん
2019/10/17(木) 17:14:21.91ID:ieavKq01 うまくいかなかった原因分かった?
903デフォルトの名無しさん
2019/10/17(木) 17:19:49.73ID:z1/RyPhF >>899
それだめ。 shellcheck使ってみ、エラーになる。
shellcheck において && || みたいな三項演算子風な使い方は
func && VALUE=ok || VALUE=ng
という書き方(変数代入)のみ認められる。
func && foo || bar
は認められない。
なぜかと言うと、
1. func が 正常終了して
2. foo が 異常終了すると
3. bar が 実行されるから
変数代入に限れば必ずVALUE=okは正常終了するから、
この書き方に限って許されてる。
だから、一応fooが必ず正常終了するものであれば、使えなくはないけど
静的解析ではそれを知ることが不可能なので、shellcheckはエラーになる。
あともう一つ、barが異常終了したとき、&& || だと $?はエラーになるが、
ifで書けばfi終了後、$? は正常終了になってるという違いもある。
だからset -eでの挙動が変わる。
それだめ。 shellcheck使ってみ、エラーになる。
shellcheck において && || みたいな三項演算子風な使い方は
func && VALUE=ok || VALUE=ng
という書き方(変数代入)のみ認められる。
func && foo || bar
は認められない。
なぜかと言うと、
1. func が 正常終了して
2. foo が 異常終了すると
3. bar が 実行されるから
変数代入に限れば必ずVALUE=okは正常終了するから、
この書き方に限って許されてる。
だから、一応fooが必ず正常終了するものであれば、使えなくはないけど
静的解析ではそれを知ることが不可能なので、shellcheckはエラーになる。
あともう一つ、barが異常終了したとき、&& || だと $?はエラーになるが、
ifで書けばfi終了後、$? は正常終了になってるという違いもある。
だからset -eでの挙動が変わる。
904デフォルトの名無しさん
2019/10/17(木) 17:21:53.83ID:z1/RyPhF もちろん、&& 単独、もしくは || 単独で 使うならば問題ない。
func && foo とか func || bar ならOK
func && foo とか func || bar ならOK
905デフォルトの名無しさん
2019/10/17(木) 17:26:43.45ID:PM8kIYTO906デフォルトの名無しさん
2019/10/17(木) 17:33:24.48ID:z1/RyPhF あー、やっぱりそうなんや
https://en.wikipedia.org/wiki/Getopt
https://en.wikipedia.org/wiki/Getopts
getoptは1980年頃つくられた。初期のgetoptは低機能
その改良として getopts が1986年にBourne shellに実装されたらしい。
その後、getopts (Solaris) と getopt (GNU) それぞれ違うコマンドで
ロングオプションがサポートされ
どちらでもないBSD(macOS含む)では、従来どおり
低機能な getopt と それを少し改良した getopts があるが
どちらもロングオプションはサポートしてないと
https://en.wikipedia.org/wiki/Getopt
https://en.wikipedia.org/wiki/Getopts
getoptは1980年頃つくられた。初期のgetoptは低機能
その改良として getopts が1986年にBourne shellに実装されたらしい。
その後、getopts (Solaris) と getopt (GNU) それぞれ違うコマンドで
ロングオプションがサポートされ
どちらでもないBSD(macOS含む)では、従来どおり
低機能な getopt と それを少し改良した getopts があるが
どちらもロングオプションはサポートしてないと
907デフォルトの名無しさん
2019/10/17(木) 17:37:12.84ID:z1/RyPhF >>905
だからダブルクォートで括るからいかんのや
ls "$dir/tmp/" * ".txt"
これが正解(スペースは目立たせるために入れただけ)
この書き方ダサいよなw
ちなみに古いシェル(poshだっけ?)でこれがうまく行かない
バグがあるのだが、まあ誰も気にしないわなw
だからダブルクォートで括るからいかんのや
ls "$dir/tmp/" * ".txt"
これが正解(スペースは目立たせるために入れただけ)
この書き方ダサいよなw
ちなみに古いシェル(poshだっけ?)でこれがうまく行かない
バグがあるのだが、まあ誰も気にしないわなw
908デフォルトの名無しさん
2019/10/17(木) 17:40:52.02ID:z1/RyPhF getopts (Solaris) でロングオプションがサポートされたってシェルなんだ?って思ったら、
Solarisでは/usr/bin/getoptsが存在するのか・・・
紛らわしいな
https://docs.oracle.com/cd/E26924_01/html/E29112/getopts-1.html
Solarisでは/usr/bin/getoptsが存在するのか・・・
紛らわしいな
https://docs.oracle.com/cd/E26924_01/html/E29112/getopts-1.html
909デフォルトの名無しさん
2019/10/17(木) 17:43:27.80ID:z1/RyPhF あ、いや /usr/bin/getopts もあるにはあるが、libcのgetopt()実装が拡張されたから
それを使ってるBourne Shellでも使えるようになったのか
> getopts (Solaris enhanced)
> As a result, this new feature was also available in the built-in command getopts of the Bourne Shell.
それを使ってるBourne Shellでも使えるようになったのか
> getopts (Solaris enhanced)
> As a result, this new feature was also available in the built-in command getopts of the Bourne Shell.
910デフォルトの名無しさん
2019/10/17(木) 17:47:11.17ID:PM8kIYTO >>907
うおおできた!
ls "$dir/tmp/"*".txt" && echo "ok" || echo "ng"
みたいな感じにした
(txtファイルがひとつもないときエラー出るけど!無視)
d
うおおできた!
ls "$dir/tmp/"*".txt" && echo "ok" || echo "ng"
みたいな感じにした
(txtファイルがひとつもないときエラー出るけど!無視)
d
911デフォルトの名無しさん
2019/10/17(木) 19:06:38.69ID:yPX5iNuE ジェルスクリプトってバッドノウハウの塊なんだな…
912デフォルトの名無しさん
2019/10/17(木) 21:18:21.03ID:CFrrzXLD TeXで書かれた人工知能みて,「バッドノウハウ」って言ってるみたいw
913デフォルトの名無しさん
2019/10/17(木) 21:23:39.68ID:1JFOpLrO GLOB展開と""内での文字列展開は別物で""内での文字列展開にGLOBは含まれないというだけだけどな
914デフォルトの名無しさん
2019/10/17(木) 22:15:54.16ID:yIl6cqO6 マニュアルにかっちり書いてあるんだけどな
読み解くのは確かに能力が必要だが
読み解くのは確かに能力が必要だが
915デフォルトの名無しさん
2019/10/18(金) 00:25:26.47ID:DhnYyybT916デフォルトの名無しさん
2019/10/18(金) 00:33:26.40ID:l6dCA2lX $ mkdir tmp && cd tmp
$ touch $'a\nb.txt'
$ find . -type f -name '*.txt' | wc -l
2
$ touch $'a\nb.txt'
$ find . -type f -name '*.txt' | wc -l
2
917915
2019/10/18(金) 00:51:30.34ID:DhnYyybT 相対パスなら、-path で、カレントディレクトリからの相対パスで指定する
find . -type f -path "./test/*.rb" | wc -l
find . -type f -path "./test/*.rb" | wc -l
918デフォルトの名無しさん
2019/10/18(金) 02:59:20.26ID:Shj9H2hw なるほろ
bash によるオプション解析 - Qiita
https://qiita.com/b4b4r07/items/dcd6be0bb9c9185475bb
bashのワイルドカード展開は該当するファイルが無いと*が展開されずに残る - Qiita
https://qiita.com/anqooqie/items/a2b607fe984ec982fa21
manはマニュアルだがman自体に取説が必要な皮肉
man manを読む時点で骨が折れるからしゃーない
bash によるオプション解析 - Qiita
https://qiita.com/b4b4r07/items/dcd6be0bb9c9185475bb
bashのワイルドカード展開は該当するファイルが無いと*が展開されずに残る - Qiita
https://qiita.com/anqooqie/items/a2b607fe984ec982fa21
manはマニュアルだがman自体に取説が必要な皮肉
man manを読む時点で骨が折れるからしゃーない
919915
2019/10/18(金) 04:58:51.55ID:DhnYyybT Ruby では、これでカレントディレクトリの該当ファイル数がわかる。
無ければ、0
ruby -e 'puts Dir.glob( "*.txt" ).length'
無ければ、0
ruby -e 'puts Dir.glob( "*.txt" ).length'
920デフォルトの名無しさん
2019/10/18(金) 09:56:55.15ID:dNt3vJtH /bin/ls -1d *.txt 2> /dev/null | wc -l
921デフォルトの名無しさん
2019/10/18(金) 11:02:02.61ID:lmpJOwiE find使うのは有りだと思うがmaxdepthとquitをつけたほうが良い
if test -n "$(find . -maxdepth 1 -name "*.txt" -print -quit)"; then
echo "OK"
else
echo "NG"
fi
if test -n "$(find . -maxdepth 1 -name "*.txt" -print -quit)"; then
echo "OK"
else
echo "NG"
fi
922デフォルトの名無しさん
2019/10/18(金) 11:55:18.87ID:O8T9zLoM923デフォルトの名無しさん
2019/10/18(金) 13:39:28.03ID:+f5J2l87 やっぱりどこでも動くシェルスクリプトなんて幻想なんだね…
924デフォルトの名無しさん
2019/10/18(金) 14:04:15.02ID:e+8RgQym >>918
暇なときに man と bash の man をちゃんと読み込むことをお勧めする
全部理解するのは確かに大変だが、こんな機能があるということだけ
覚えておいて、現実の問題に直面した時に詳細を再検索するのが
実用的。bash だけの問題ではないが。
暇なときに man と bash の man をちゃんと読み込むことをお勧めする
全部理解するのは確かに大変だが、こんな機能があるということだけ
覚えておいて、現実の問題に直面した時に詳細を再検索するのが
実用的。bash だけの問題ではないが。
925デフォルトの名無しさん
2019/10/18(金) 23:14:29.88ID:m9M+BHHc bashのmanはメンテされてないんじゃね?
926デフォルトの名無しさん
2019/10/18(金) 23:19:16.34ID:1h1F7NR4 日本語版がメンテナンスされてない(もしくは遅い)だけだよ
927デフォルトの名無しさん
2019/10/19(土) 00:34:03.00ID:+f1cBD8l 日本語版の記述が少なくて英語版の方だけびっしりとか実にマニュアルらしい
928デフォルトの名無しさん
2019/10/19(土) 13:26:03.97ID:9TTj0TwZ 近頃は無料で web 上で使える翻訳ソフトの質も上がっているし
頑張って読んでくれ。
頑張って読んでくれ。
929デフォルトの名無しさん
2019/10/19(土) 19:06:51.24ID:VYVT60v2 翻訳めっちゃハッテンしてきてるよね
930デフォルトの名無しさん
2019/10/19(土) 20:14:11.99ID:jibveSnU ウホッ
じゃなくて
なんだ
infoとかそっちしかハッテンしてないとかあるじゃん
じゃなくて
なんだ
infoとかそっちしかハッテンしてないとかあるじゃん
931デフォルトの名無しさん
2019/10/20(日) 17:43:31.69ID:Tm15VeOJ まあ、確かに sed の s コマンドのオプションは man にも入れてほしかった。
オプション使えなくなったのかと思ったじゃないか…
オプション使えなくなったのかと思ったじゃないか…
932デフォルトの名無しさん
2019/10/20(日) 23:14:32.47ID:n5s+FSXq 日本語版だけスカスカと言えばlocate
933デフォルトの名無しさん
2019/10/21(月) 17:13:45.45ID:mT54cHzD まあ裏を返せばそれだけ国際標準から離れていないってことよね。
ar.localeとか酷い……
ar.localeとか酷い……
934デフォルトの名無しさん
2019/10/21(月) 21:16:47.36ID:SCSOJkPH あるユーザー(Aとする)が、他のユーザー(Bとする)にのみWrite権限があるファイルを削除するような作業を自動化したいです。
当然そのままでは削除できないので、AからRootに切り替わり、ファイルを削除した後、Rootを抜けてAに戻るというBashスクリプトを作成しようとしています。
AはSudoが実行できない環境で、Expectコマンドもありません。Rootのパスワードはわかっており、平文でシェルスクリプト内に書き込んでも構いません(使用者が数人で、かつ外部に接続できないため。なのでセキュリティの問題は今回は無視)。
このような状態で、どうにか目的を果たすスクリプトはかけますでしょうか。
OSはFedora10、新たにプログラムパッケージ等はインストールできません。
よろしくおねがいします。
当然そのままでは削除できないので、AからRootに切り替わり、ファイルを削除した後、Rootを抜けてAに戻るというBashスクリプトを作成しようとしています。
AはSudoが実行できない環境で、Expectコマンドもありません。Rootのパスワードはわかっており、平文でシェルスクリプト内に書き込んでも構いません(使用者が数人で、かつ外部に接続できないため。なのでセキュリティの問題は今回は無視)。
このような状態で、どうにか目的を果たすスクリプトはかけますでしょうか。
OSはFedora10、新たにプログラムパッケージ等はインストールできません。
よろしくおねがいします。
935デフォルトの名無しさん
2019/10/21(月) 21:41:04.04ID:aSOXSPh+ すなおにrootで全部やれば良いんじゃね?
936デフォルトの名無しさん
2019/10/21(月) 22:08:16.20ID:/woRRfjw >>934
そもそもAがファイルを消せるようにパーミッションが初めから設定されるようには出来ないの?
そもそもAがファイルを消せるようにパーミッションが初めから設定されるようには出来ないの?
937デフォルトの名無しさん
2019/10/21(月) 22:24:13.78ID:Ol8k0rNq >>934
ファイルを削除するだけの実行ファイルを作ってsetuidビット立てて所有者をBにするとかすればできないかな?
ファイルを削除するだけの実行ファイルを作ってsetuidビット立てて所有者をBにするとかすればできないかな?
938デフォルトの名無しさん
2019/10/21(月) 22:25:13.50ID:Ol8k0rNq 追記。シェルスクリプト自体にはsetuidは使えない。
939デフォルトの名無しさん
2019/10/21(月) 22:52:13.48ID:pvaospDZ Fedora10って10年前のかっ
su: must be run from a terminal
にならんのだったらsuでいいんじゃないの。パスワード流すのは exec ででも
su: must be run from a terminal
にならんのだったらsuでいいんじゃないの。パスワード流すのは exec ででも
940デフォルトの名無しさん
2019/10/22(火) 00:44:01.51ID:7OkeLCGH ディレクトリにwが付いてればファイルは消せるけどなあ
941デフォルトの名無しさん
2019/10/22(火) 02:43:55.19ID:T9lP8zyy942デフォルトの名無しさん
2019/10/22(火) 09:04:44.04ID:xSNqVMSD >>941
# mkdir /dir
# chown userA:groupA /dir
# chmod 700 /dir
# cp /bin/rm /dir/rmB
# chown userB:groupB /dir/rmB
# chmod 6755 /dir/rmB
userA $ /dir/rmB /home/userB/file
# mkdir /dir
# chown userA:groupA /dir
# chmod 700 /dir
# cp /bin/rm /dir/rmB
# chown userB:groupB /dir/rmB
# chmod 6755 /dir/rmB
userA $ /dir/rmB /home/userB/file
943デフォルトの名無しさん
2019/10/22(火) 10:51:03.29ID:p4xpj08d こんな文字列野中に含まれる数字を
ゼロパディングしたいと思います
"何とかって講義 第5回 何とか特集.mp3"
まずは2桁でそろえてやりたいのですが
grep "第[1-9]回"
で一桁のものを引っ掛けて
前後をsedで除いて
sed "s/.*第//g
sed "s/回.*//g"
ゼロ埋めはprintfで実現しようと思うのですが
printf %02d $times
もっとシンプルな方法は無いでしょうか?
ゼロパディングしたいと思います
"何とかって講義 第5回 何とか特集.mp3"
まずは2桁でそろえてやりたいのですが
grep "第[1-9]回"
で一桁のものを引っ掛けて
前後をsedで除いて
sed "s/.*第//g
sed "s/回.*//g"
ゼロ埋めはprintfで実現しようと思うのですが
printf %02d $times
もっとシンプルな方法は無いでしょうか?
944デフォルトの名無しさん
2019/10/22(火) 10:52:23.81ID:p4xpj08d なお最終的な文字列の組み立てなおしは
数字の前後も抽出して3つを連結するつもりです
数字の前後も抽出して3つを連結するつもりです
945デフォルトの名無しさん
2019/10/22(火) 11:04:28.98ID:+cbyszgy perl5 が使えるなら
echo "何とかって講義 第2345回 何とか特集.mp3" | perl -pe 's/第(\d+)回/ sprintf "第%06d回", $1/exm'
何とかって講義 第002345回 何とか特集.mp3
echo "何とかって講義 第2345回 何とか特集.mp3" | perl -pe 's/第(\d+)回/ sprintf "第%06d回", $1/exm'
何とかって講義 第002345回 何とか特集.mp3
946デフォルトの名無しさん
2019/10/22(火) 13:09:31.40ID:QfoZv31s $ echo "何とかって講義 第2345回 何とか特集.mp3" | sed -E 's/第([0-9]+)回/第000000\1回/; s/0*([0-9]{6})/\1/'
6桁揃えにしたければ最初に6個0を足して次に6桁のみ残す
$ rename -n 's/\d+/sprintf("%06d",$&)/e' *.mp3
rename utilityが使えるならsprintfが使える
6桁揃えにしたければ最初に6個0を足して次に6桁のみ残す
$ rename -n 's/\d+/sprintf("%06d",$&)/e' *.mp3
rename utilityが使えるならsprintfが使える
947デフォルトの名無しさん
2019/10/22(火) 15:10:24.02ID:W8s8s9Eh perlもrenameもPOSIX規格外
948デフォルトの名無しさん
2019/10/22(火) 15:18:54.31ID:AwOtA+WM みんな真偽値ってどうしてる?
949デフォルトの名無しさん
2019/10/22(火) 15:21:29.60ID:p4xpj08d950デフォルトの名無しさん
2019/10/22(火) 15:23:02.88ID:AwOtA+WM FLAG=true or false ?
FLAG=1 or 0 ?
FLAG=1 or unset ?
FLAG=1 or "" ?
それ以外?
FLAG=1 or 0 ?
FLAG=1 or unset ?
FLAG=1 or "" ?
それ以外?
951デフォルトの名無しさん
2019/10/22(火) 20:26:37.95ID:2f71vpaR alias FLAG true/alias FLAG false
if FLAG; then
if FLAG; then
952デフォルトの名無しさん
2019/10/22(火) 20:27:08.55ID:2f71vpaR でもBashだとファイル内では既定で使えない。
953デフォルトの名無しさん
2019/10/22(火) 21:23:51.15ID:CciDAIxr >>952
面白いけど、サブシェルの中で変えられないから
alias FLAG=true
(
alias FLAG=false
if FLAG; then
echo true
fi
)
出力
true
面白いけど、サブシェルの中で変えられないから
alias FLAG=true
(
alias FLAG=false
if FLAG; then
echo true
fi
)
出力
true
954デフォルトの名無しさん
2019/10/23(水) 10:43:57.77ID:oiOUCahJ TRUE=$([ 0 = 0 ];echo $?)
FALSE=$([ ! $TRUE ];echo $?)
FLAG=$TRUE or $FALSE
FALSE=$([ ! $TRUE ];echo $?)
FLAG=$TRUE or $FALSE
955デフォルトの名無しさん
2019/10/23(水) 10:57:17.22ID:jQcWWJt3 サイトによってrenameの構文が違うけどコマンド自体が違うのな
perl付属のprenameとutil-linux付属のrename.ulがあるとか
alternativesで書き換えられてるんだからそら気付かんわ
perl付属のprenameとutil-linux付属のrename.ulがあるとか
alternativesで書き換えられてるんだからそら気付かんわ
956デフォルトの名無しさん
2019/10/24(木) 17:48:17.61ID:mthfJT/n >>953
知らんかった。恥ずかしいw
知らんかった。恥ずかしいw
957デフォルトの名無しさん
2019/10/24(木) 17:49:17.77ID:mthfJT/n >>954
それってTRUE=0とするのと何が違うの?
それってTRUE=0とするのと何が違うの?
958デフォルトの名無しさん
2019/10/24(木) 18:07:25.18ID:lp1ZwQII >>956
サブシェルは関係ない。俺もちゃんと仕様読んだわけじゃないけど、
aliasは実行時じゃなくて、1単位ごとに → パース → 実行 の
パース時に変換してる感じ
そして1単位というのは、
alias FLAG=true
alias FLAG=false; FLAG && echo true
↑これは一行で一単位、だからtrueと表示されてしまうし
関数とか、プロンプトから、func() { 改行 とかやると
} 改行 するまで、ずっと行頭に > って表示されるだろ?
あれが1単位。だから↓みたいなものもtrueって表示されてしまうんだよ
alias FLAG=true
func() {
alias FLAG=false
if FLAG; then
echo true
fi
}
func
サブシェルは関係ない。俺もちゃんと仕様読んだわけじゃないけど、
aliasは実行時じゃなくて、1単位ごとに → パース → 実行 の
パース時に変換してる感じ
そして1単位というのは、
alias FLAG=true
alias FLAG=false; FLAG && echo true
↑これは一行で一単位、だからtrueと表示されてしまうし
関数とか、プロンプトから、func() { 改行 とかやると
} 改行 するまで、ずっと行頭に > って表示されるだろ?
あれが1単位。だから↓みたいなものもtrueって表示されてしまうんだよ
alias FLAG=true
func() {
alias FLAG=false
if FLAG; then
echo true
fi
}
func
959793
2019/10/24(木) 18:35:35.72ID:n545jbBX >>795-797
時間が経ってしまいましたが、ありがとうございました
"$()"の中の"はエスケープする必要があるのかどうか、とか、変数代入への挙動とか、そういう細かいところがよくわかってなかったです。
時間が経ってしまいましたが、ありがとうございました
"$()"の中の"はエスケープする必要があるのかどうか、とか、変数代入への挙動とか、そういう細かいところがよくわかってなかったです。
960デフォルトの名無しさん
2019/10/24(木) 22:00:36.73ID:mthfJT/n >>958
あー。
aliasってたしか一つの構文解析のかなり初期段階で展開される筈だから,
その一つの解析対象の内部で定義されているaliasは(当然)それ自身の解析結果には反映されんな。
このへんだろうか??
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_10
あー。
aliasってたしか一つの構文解析のかなり初期段階で展開される筈だから,
その一つの解析対象の内部で定義されているaliasは(当然)それ自身の解析結果には反映されんな。
このへんだろうか??
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_10
961デフォルトの名無しさん
2019/10/25(金) 00:11:27.02ID:6btPTvif962デフォルトの名無しさん
2019/10/25(金) 07:59:28.70ID:6Bcci7V7963デフォルトの名無しさん
2019/10/25(金) 23:17:19.52ID:TUsRGFSKレス数が950を超えています。1000を超えると書き込みができなくなります。
ニュース
- テレビ朝日 本社から男性が転落し死亡。関連会社社員か 当たった通行人が左肩軽傷 [阿弥陀ヶ峰★]
- テレビ朝日本社から20~30代の関連会社社員とみられる男性が転落し死亡 六本木けやき坂通りの通行人にはけが人なし [少考さん★]
- 高市早苗首相が天理教系企業に“巨額発注” 総額5000万円 本人は「政治団体の活動に必要な支出」と回答 ★2 [Hitzeschleier★]
- 小島瑠璃子さん、代表取締役を務める会社を破産申請 [牛丼★]
- 「残クレ」でマイホーム、国が銀行向け保険 新型住宅ローン普及促す -日経 ★3 [少考さん★]
- 【サッカー】日本代表、FIFAランキング“4位”の強豪イングランドとの対戦が正式決定! 来年3月に聖地ウェンブリーで激突へ [久太郎★]
- (´・ω・`)クリスマスが今年もやってくる~
- 【悲報】ジャップ、日中戦争に賛成が5割弱...軍歌の音が聞こえる... [856698234]
- 千晴さん千晴さん
- 晃←コレの読み方wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
- 俺も猫か犬と布団で寝たい
- 【乞食速報】プロクオリティ ビーフカレー 96食 4262円 [268244553]
