- 1 名前:デフォルトの名無しさん mailto:sage [2019/08/10(土) 23:17:50.64 ID:L+B8OP2P.net]
- シェルスクリプトに関する総合スレッドです。
全般 ・荒しは無視しましょう。 ・丁寧な姿勢を心掛けましょう。 ・ネチケット(死語)を意識しましょう。 ・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。 シェルスクリプト総合 その30 https://mevius.5ch.net/test/read.cgi/tech/1561989867/
- 855 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 11:20:12.25 ID:NnE09bAt.net]
- 少数派だが入ってない
- 856 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 11:24:56.60 ID:kChpVj98.net]
- 所属する研究室のMFにも入ってねーな。
Bシェルとかは(もちろん)入ってるけど そういう点で言えばPOSIX準拠のシェルがあるようなシステムにはPerlも入っていて PerlもないようなシステムにはPOSIX準拠シェルもないのかも知れんw
- 857 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 12:03:22.79 ID:NnE09bAt.net]
- だからAlpine linuxにはPOSIX準拠のシェルは入っているが
Perlは入ってないんだって。 いい加減Perl依存やめようぜw
- 858 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 12:15:46.78 ID:rthNV3zo.net]
- 俺達もそろそろPOSIX汚染から脱却しようぜ
- 859 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 12:17:46.00 ID:NnE09bAt.net]
- >>847
じゃあ言い出しっぺのあなたから、POSIXが含まれてる LinuxやBSDやUnixやMacやWindowsを使うのをやめてください
- 860 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 12:21:19.21 ID:rthNV3zo.net]
- そもそも使ってないし
- 861 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 12:28:35.75 ID:NnE09bAt.net]
- サーバー側で使われてる
- 862 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 12:38:20.58 ID:462kqzf/.net]
- 相変わらずPOSIX原理主義者が張り付いてるんだな
日本は信教の自由はあるが強要するのは犯罪だ 他人を巻き込まないで1人でやってろよ
- 863 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 12:54:03.04 ID:NnE09bAt.net]
- だからPOSIX原理主義じゃないってw
Alpineはbusybox使ってるからPOSIX未満なんだよ
- 864 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 13:05:31.69 ID:462kqzf/.net]
- お前はperl使いたくないんだろ?
お前の自由だし好きにすればいい それを他人に押し付けるなと言っている 俺は普通にperlを使う 俺の自由だし好きにする 以上
- 865 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 13:12:15.17 ID:rthNV3zo.net]
- ∧∧ ミ _ ドスッ
( ,,)┌─┴┴─┐ / つ. 終 了 │ 〜′ /´ └─┬┬─┘ ∪ ∪ ││ _ε3 ゛゛'゛'゛
- 866 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 13:16:18.11 ID:NnE09bAt.net]
- 誰もPerl使うなって言ってないだろ。
Perlが入ってない環境があるという 事実を言ってるんだが
- 867 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 14:00:34.35 ID:mC4FM69a.net]
- >>845
そのミッドフィールダーってなに?
- 868 名前:デフォルトの名無しさん [2019/10/06(日) 14:56:55.93 ID:VRfDnOhz.net]
- マネーフォワードだろ。
- 869 名前:デフォルトの名無しさん [2019/10/06(日) 17:41:58.00 ID:3lXqNGxa.net]
- 容量削減のためにPerlだけ抜くのも変だしそれ目的なら他のも入ってないのでは?
- 870 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 21:01:12.68 ID:TprJMO+0.net]
- まぁないものどうこう言っても始まらない
ただwin のiE6とかのようにubuntu以外は淘汰されていくだろうから 最終的には問題ないんじゃない?
- 871 名前:デフォルトの名無しさん [2019/10/06(日) 21:15:53.96 ID:/W6lnfS0.net]
- Linuxはdistributionごとに色々目的が違うからPerl入ってないのがあっても特に不思議はない。
AndroidのベースのLinuxにも入ってないし、普通はそこでは必要とされない。
- 872 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 21:31:35.20 ID:1e7RWsdc.net]
- AndroidをLinuxとして使ってるのはどれだけいるのかと
- 873 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 22:18:30.79 ID:+aq+gJyQ.net]
- それ向けの端末エミュレータとかシェルスクリプト編集実行とかは結構種類あるけどね
割合は少ないだろうね
- 874 名前:デフォルトの名無しさん mailto:sage [2019/10/07(月) 02:35:02.37 ID:qQU+qyu9.net]
- そういう人はperlも必要なら入れるな。perlに限らず
- 875 名前:デフォルトの名無しさん mailto:sage [2019/10/07(月) 08:39:27.35 ID:4YPUQoiH.net]
- >>818 Python やっとけ。 perl は成仏させろ
- 876 名前:デフォルトの名無しさん [2019/10/07(月) 12:58:26.99 ID:lSqRbxbA.net]
- PerlはCの如くしぶとく残ってしまうと思うなあ。
- 877 名前:デフォルトの名無しさん mailto:sage [2019/10/07(月) 14:23:04.89 ID:MItW4Ls8.net]
- sedやawkを忘れたんで代わりにperlを使うことが結構ある
- 878 名前:デフォルトの名無しさん mailto:sage [2019/10/07(月) 15:51:12.82 ID:Wc5EJs/z.net]
- perl -peをsed代わりに使ってるだけでperl自体には興味ないや
正規表現しか出番ないし使う機会がないんだよね awkとかgrepとかどうせ他のコマンドも
- 879 名前:覚えなきゃならんし []
- [ここ壊れてます]
- 880 名前:デフォルトの名無しさん mailto:sage [2019/10/08(火) 14:32:15.36 ID:C04IGCd6.net]
- >>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
- 881 名前:デフォルトの名無しさん mailto:sage [2019/10/08(火) 15:00:13.27 ID:dg9qT1Hg.net]
- Perlはsedやawkと同じ位置で見ないとだめだよ
シェルスクリプトを書くときにsedやawkのように使う道具のひとつ もちろんシェルスクリプトをまるごとPerlのスクリプトに置き換えてもいいけどそれは別の話 Perlを排除するのは武器を一つ捨てるようなもので損してるよ
- 882 名前:デフォルトの名無しさん mailto:sage [2019/10/08(火) 15:03:58.28 ID:4CpPhkv4.net]
- 汎用言語としてはpython の時代に移ったかもしれないが
文字処理言語としてはいまだ現役
- 883 名前:デフォルトの名無しさん mailto:sage [2019/10/08(火) 15:16:45.62 ID:wc9EJfFY.net]
- >>869
と言ってもお前、sedやawkが使えないから perlを使ってるだけやん。 お前の問題であって、perlである必要ないやん
- 884 名前:デフォルトの名無しさん mailto:sage [2019/10/08(火) 15:49:08.88 ID:dg9qT1Hg.net]
- 俺当然sedもawkも使えるんだけど?
awkで複雑になる処理をPerlで可読性高く楽に書いてるってだけ あんたも使える道具をうまく選べばいいんでPerlを知らなくても気にするな
- 885 名前:デフォルトの名無しさん mailto:sage [2019/10/08(火) 16:39:54.73 ID:9VgyN7XE.net]
- 「Perlの方が楽に書ける」なんていうのは個人の嗜好に依存してて,ほとんど無根拠に近い。
もしPerlの「素晴しさ」とやらを報しめたいのなら,もっと客観的な事実――導入率・実績云々――を提示したほうがいいよ。 尤も,俺に言わせればAWKのほうが〜Perlのほうが〜なんていう議論とも呼べない喧嘩それ自体くだらねぇけどな
- 886 名前:デフォルトの名無しさん mailto:sage [2019/10/08(火) 17:07:54.66 ID:uaD7+k1O.net]
- >>872 sed もawk も使えるならPython を使えばいいじゃん。
お前がPythonを使えないだけだろ。
- 887 名前:デフォルトの名無しさん mailto:sage [2019/10/08(火) 17:13:16.90 ID:gh1TIWVl.net]
- 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]'
- 888 名前:デフォルトの名無しさん mailto:sage [2019/10/08(火) 18:40:06.69 ID:4CpPhkv4.net]
- gnu sed なら -e すら省けるんだよな
- 889 名前:デフォルトの名無しさん [2019/10/08(火) 18:40:15.32 ID:g
]
- [ここ壊れてます]
- 890 名前:O+Oxfwr.net mailto: こうして宗教戦争が始まったのです。 []
- [ここ壊れてます]
- 891 名前:デフォルトの名無しさん mailto:sage [2019/10/08(火) 19:07:13.65 ID:/hvysQLZ.net]
- pythonはワンラインにはあまり向かんのは同意。
フリーフォーマットじゃないんで当たり前といえば当たり前か。
- 892 名前:デフォルトの名無しさん mailto:sage [2019/10/08(火) 19:30:38.22 ID:vS76WaY3.net]
- 宗教戦争は自分の信じるものが正しく、それ以外は認めないという非寛容が原因で始まる
- 893 名前:デフォルトの名無しさん mailto:sage [2019/10/09(水) 02:18:53.91 ID:CaMm18My.net]
- python ワンライナーに挑戦 〜 初心者のお勉強 m(_ _)m - Qiita
https://qiita.com/wyamamo/items/667c79db7edbaa9a46a7 闇Pythonista入門(Pythonワンライナーのテクニック集) - Qiita https://qiita.com/cocuh/items/37bfdc0f24750127e7d3 杓子定規にするからこうなる 知恵比べはまた別の課題だろうに
- 894 名前:デフォルトの名無しさん [2019/10/11(金) 19:00:05.85 ID:QtmRuluN.net]
- case $value in
*-*=*-*) esac こんなふうに、*が複数ある場合の動きとかちゃんと仕様化されてるの どのシェルでも同じように動く?
- 895 名前:デフォルトの名無しさん mailto:sage [2019/10/11(金) 19:51:09.99 ID:5TKzffM3.net]
- 「されてるの?」
なのか 「されてるの(だ)」 なのか。
- 896 名前:デフォルトの名無しさん [2019/10/11(金) 22:19:25.99 ID:EZwTHuUV.net]
- >>881
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_13_02
- 897 名前:デフォルトの名無しさん [2019/10/12(Sat) 11:56:42 ID:6fabclhr.net]
- >>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ってでる どういうアルゴリズムなのかわからない
- 898 名前:デフォルトの名無しさん mailto:sage [2019/10/12(土) 13:05:32.76 ID:19ZHiYan.net]
- Perlの正規表現なら最長マッチがデフォ
- 899 名前:デフォルトの名無しさん [2019/10/12(Sat) 17:15:42 ID:1KIHwFcK.net]
- IPアドレスもgreedyが基本だな。
- 900 名前: mailto:sage [2019/10/13(Sun) 14:15:24 ID:wtTHifIn.net]
- ワイルドカードもだよね
- 901 名前: mailto:sage [2019/10/15(Tue) 20:13:38 ID:tkdZ32xn.net]
- >>884
感覚的に分かりやすい https://media.theync.com/videos/6/9/0/4/8/6904895d700f71ce3e9.mp4
- 902 名前:デフォルトの名無しさん [2019/10/16(Wed) 03:31:59 ID:Pvq8peJ9.net]
- >>888
グロ
- 903 名前:デフォルトの名無しさん [2019/10/16(水) 08:08:38.68 ID:9/jaba51.net]
- 変数名を変数で指定できるのは欠陥じゃねえ
- 904 名前:デフォルトの名無しさん [2019/10/17(木) 13:11:40.29 ID:huR1Dm0j.net]
- はー、すげー。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
- 905 名前: mailto:sage [2019/10/17(Thu) 16:55:00 ID:PM8kIYTO.net]
- if ls "*.txt" > /dev/null 2>&1
then echo "OK" else echo "NG" fi まったくうまくいかない なぜ単なるファイルの存在確認だけにこんな苦労するのか
- 906 名前: mailto:sage [2019/10/17(Thu) 17:04:24 ID:z1/RyPhF.net]
- ファイルの存在確認なら、-fを使えばいいだろ?
- 907 名前: mailto:sage [2019/10/17(Thu) 17:05:16 ID:e7ZwLQTq.net]
- # # 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 こんな要領か?
- 908 名前: mailto:sage [2019/10/17(Thu) 17:05:47 ID:z1/RyPhF.net]
- あ、ディレクトリに *.txt があるかどうかってことか?
- 909 名前: mailto:sage [2019/10/17(Thu) 17:08:50 ID:PM8kIYTO.net]
- >>893
ところがワイルドカード使うと途端に何も引っかからなくなる
- 910 名前: mailto:sage [2019/10/17(Thu) 17:09:26 ID:PM8kIYTO.net]
- >>895
そうです
- 911 名前: mailto:sage [2019/10/17(Thu) 17:10:05 ID:z1/RyPhF.net]
- getopts vs getopt だけどさ、
BSDにおいてgetoptのメリットって何? BSD版のgetoptはロングオプションに対応してないし、 引数にスペースが入ったらうまく行かないし 使い勝手悪いと思うんだが。 もしかして最初に作られたのがgetoptで それを改良してgetoptsがシェルビルトインとして作られた。 (その後GNU版getoptが改良され、getoptsよりも便利になった) という流れだったりするの?
- 912 名前: mailto:sage [2019/10/17(Thu) 17:10:16 ID:e7ZwLQTq.net]
- 普通のプログラミング言語と違って
シェルスクリプトはブーリアンの分岐は可能なら if else 使うよりも && || が見やすく良いと思う
- 913 名前: mailto:sage [2019/10/17(Thu) 17:12:52 ID:PM8kIYTO.net]
- >>894,899
いけた 分岐後の処理も大したことしないしこれでやってみようと思う?
- 914 名前: mailto:sage [2019/10/17(Thu) 17:13:24 ID:z1/RyPhF.net]
- >>896
アスタリスクを使うと、シェルが解釈して、 例えば、 ls * だと、 ls file1 file2 file3 file4 って実行したのと同じことになるんだぞ。 lsコマンドの中からはアスタリスクが使われてるかどうかなんてわからない。 そしてダブルクォートで括ると、lsコマンドの中から引数は "*" という文字列が渡されたようになるんだよ。
- 915 名前: mailto:sage [2019/10/17(Thu) 17:14:21 ID:ieavKq01.net]
- うまくいかなかった原因分かった?
- 916 名前:デフォルトの名無しさん mailto:sage [2019/10/17(木) 17:19:49.73 ID:z1/RyPhF.net]
- >>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での挙動が変わる。
- 917 名前:デフォルトの名無しさん mailto:sage [2019/10/17(木) 17:21:53.83 ID:z1/RyPhF.net]
- もちろん、&& 単独、もしくは || 単独で 使うならば問題ない。
func && foo とか func || bar ならOK
- 918 名前:デフォルトの名無しさん mailto:sage [2019/10/17(木) 17:26:43.45 ID:PM8kIYTO.net]
- 今度は ls "$dir/tmp/*.txt"
みたいなことしたらアクセスできませんみたいなことを言われた >>901 なるほど >>902 多分"*.txt"ファイルにアクセスしようとしてできないって言われたことが原因? でもなぜかls *.txtみたいに、ファイル直だとイケる
- 919 名前:デフォルトの名無しさん mailto:sage [2019/10/17(木) 17:33:24.48 ID:z1/RyPhF.net]
- あー、やっぱりそうなんや
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 があるが どちらもロングオプションはサポートしてないと
- 920 名前:デフォルトの名無しさん mailto:sage [2019/10/17(木) 17:37:12.84 ID:z1/RyPhF.net]
- >>905
だからダブルクォートで括るからいかんのや ls "$dir/tmp/" * ".txt" これが正解(スペースは目立たせるために入れただけ) この書き方ダサいよなw ちなみに古いシェル(poshだっけ?)でこれがうまく行かない バグがあるのだが、まあ誰も気にしないわなw
- 921 名前: mailto:sage [2019/10/17(Thu) 17:40:52 ID:z1/RyPhF.net]
- getopts (Solaris) でロングオプションがサポートされたってシェルなんだ?って思ったら、
Solarisでは/usr/bin/getoptsが存在するのか・・・ 紛らわしいな https://docs.oracle.com/cd/E26924_01/html/E29112/getopts-1.html
- 922 名前: mailto:sage [2019/10/17(Thu) 17:43:27 ID:z1/RyPhF.net]
- あ、いや /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.
- 923 名前: mailto:sage [2019/10/17(Thu) 17:47:11 ID:PM8kIYTO.net]
- >>907
うおおできた! ls "$dir/tmp/"*".txt" && echo "ok" || echo "ng" みたいな感じにした (txtファイルがひとつもないときエラー出るけど!無視) ?
- 924 名前:デフォルトの名無しさん [2019/10/17(Thu) 19:06:38 ID:yPX5iNuE.net]
- ジェルスクリプトってバッドノウハウの塊なんだな…
- 925 名前:デフォルトの名無しさん mailto:sage [2019/10/17(木) 21:18:21.03 ID:CFrrzXLD.net]
- TeXで書かれた人工知能みて,「バッドノウハウ」って言ってるみたいw
- 926 名前:デフォルトの名無しさん mailto:sage [2019/10/17(木) 21:23:39.68 ID:1JFOpLrO.net]
- GLOB展開と""内での文字列展開は別物で""内での文字列展開にGLOBは含まれないというだけだけどな
- 927 名前:デフォルトの名無しさん mailto:sage [2019/10/17(木) 22:15:54.16 ID:yIl6cqO6.net]
- マニュアルにかっちり書いてあるんだけどな
読み解くのは確かに能力が必要だが
- 928 名前:デフォルトの名無しさん mailto:sage [2019/10/18(金) 00:25:26.47 ID:DhnYyybT.net]
- >>892-897
find . -type f -name "*.txt" | wc -l -type f は、ファイルのみ。 wc -l は、行数を数える。無ければ、0
- 929 名前:デフォルトの名無しさん mailto:sage [2019/10/18(金) 00:33:26.40 ID:l6dCA2lX.net]
- $ mkdir tmp && cd tmp
$ touch $'a\nb.txt' $ find . -type f -name '*.txt' | wc -l 2
- 930 名前: mailto:sage [2019/10/18(Fri) 00:51:30 ID:DhnYyybT.net]
- 相対パスなら、-path で、カレントディレクトリからの相対パスで指定する
find . -type f -path "./test/*.rb" | wc -l
- 931 名前: mailto:sage [2019/10/18(Fri) 02:59:20 ID:Shj9H2hw.net]
- なるほろ
bash によるオプション解析 - Qiita https://qiita.com/b4b4r07/items/dcd6be0bb9c9185475bb bashのワイルドカード展開は該当するファイルが無いと*が展開されずに残る - Qiita https://qiita.com/anqooqie/items/a2b607fe984ec982fa21 manはマニュアルだがman自体に取説が必要な皮肉 man manを読む時点で骨が折れるからしゃーない
- 932 名前:915 mailto:sage [2019/10/18(金) 04:58:51.55 ID:DhnYyybT.net]
- Ruby では、これでカレントディレクトリの該当ファイル数がわかる。
無ければ、0 ruby -e 'puts Dir.glob( "*.txt" ).length'
- 933 名前: mailto:sage [2019/10/18(Fri) 09:56:55 ID:dNt3vJtH.net]
- /bin/ls -1d *.txt 2> /dev/null | wc -l
- 934 名前:デフォルトの名無しさん mailto:sage [2019/10/18(金) 11:02:02.61 ID:lmpJOwiE.net]
- find使うのは有りだと思うがmaxdepthとquitをつけたほうが良い
if test -n "$(find . -maxdepth 1 -name "*.txt" -print -quit)"; then echo "OK" else echo "NG" fi
- 935 名前: mailto:sage [2019/10/18(Fri) 11:55:18 ID:O8T9zLoM.net]
- >>921
ただしそれらは POSIX 準拠ではない https://pubs.opengroup.org/onlinepubs/9699919799/utilities/find.html
- 936 名前:デフォルトの名無しさん [2019/10/18(Fri) 13:39:28 ID:+f5J2l87.net]
- やっぱりどこでも動くシェルスクリプトなんて幻想なんだね…
- 937 名前: mailto:sage [2019/10/18(Fri) 14:04:15 ID:e+8RgQym.net]
- >>918
暇なときに man と bash の man をちゃんと読み込むことをお勧めする 全部理解するのは確かに大変だが、こんな機能があるということだけ 覚えておいて、現実の問題に直面した時に詳細を再検索するのが 実用的。bash だけの問題ではないが。
- 938 名前:デフォルトの名無しさん mailto:sage [2019/10/18(金) 23:14:29.88 ID:m9M+BHHc.net]
- bashのmanはメンテされてないんじゃね?
- 939 名前:デフォルトの名無しさん mailto:sage [2019/10/18(金) 23:19:16.34 ID:1h1F7NR4.net]
- 日本語版がメンテナンスされてない(もしくは遅い)だけだよ
- 940 名前:デフォルトの名無しさん mailto:sage [2019/10/19(土) 00:34:03.00 ID:+f1cBD8l.net]
- 日本語版の記述が少なくて英語版の方だけびっしりとか実にマニュアルらしい
- 941 名前:デフォルトの名無しさん mailto:sage [2019/10/19(土) 13:26:03.97 ID:9TTj0TwZ.net]
- 近頃は無料で web 上で使える翻訳ソフトの質も上がっているし
頑張って読んでくれ。
- 942 名前:デフォルトの名無しさん mailto:sage [2019/10/19(土) 19:06:51.24 ID:VYVT60v2.net]
- 翻訳めっちゃハッテンしてきてるよね
- 943 名前:デフォルトの名無しさん mailto:sage [2019/10/19(土) 20:14:11.99 ID:jibveSnU.net]
- ウホッ
じゃなくて なんだ infoとかそっちしかハッテンしてないとかあるじゃん
- 944 名前:デフォルトの名無しさん mailto:sage [2019/10/20(日) 17:43:31.69 ID:Tm15VeOJ.net]
- まあ、確かに sed の s コマンドのオプションは man にも入れてほしかった。
オプション使えなくなったのかと思ったじゃないか…
- 945 名前: mailto:sage [2019/10/20(日) 23:14:32 ID:n5s+FSXq.net]
- 日本語版だけスカスカと言えばlocate
- 946 名前:デフォルトの名無しさん mailto:sage [2019/10/21(月) 17:13:45.45 ID:mT54cHzD.net]
- まあ裏を返せばそれだけ国際標準から離れていないってことよね。
ar.localeとか酷い……
- 947 名前:デフォルトの名無しさん mailto:sage [2019/10/21(月) 21:16:47 ID:SCSOJkPH.net]
- あるユーザー(Aとする)が、他のユーザー(Bとする)にのみWrite権限があるファイルを削除するような作業を自動化したいです。
当然そのままでは削除できないので、AからRootに切り替わり、ファイルを削除した後、Rootを抜けてAに戻るというBashスクリプトを作成しようとしています。 AはSudoが実行できない環境で、Expectコマンドもありません。Rootのパスワードはわかっており、平文でシェルスクリプト内に書き込んでも構いません(使用者が数人で、かつ外部に接続できないため。なのでセキュリティの問題は今回は無視)。 このような状態で、どうにか目的を果たすスクリプトはかけますでしょうか。 OSはFedora10、新たにプログラムパッケージ等はインストールできません。 よろしくおねがいします。
- 948 名前:デフォルトの名無しさん mailto:sage [2019/10/21(月) 21:41:04 ID:aSOXSPh+.net]
- すなおにrootで全部やれば良いんじゃね?
- 949 名前:デフォルトの名無しさん mailto:sage [2019/10/21(月) 22:08:16.20 ID:/woRRfjw.net]
- >>934
そもそもAがファイルを消せるようにパーミッションが初めから設定されるようには出来ないの?
- 950 名前:デフォルトの名無しさん mailto:sage [2019/10/21(月) 22:24:13 ID:Ol8k0rNq.net]
- >>934
ファイルを削除するだけの実行ファイルを作ってsetuidビット立てて所有者をBにするとかすればできないかな?
- 951 名前:デフォルトの名無しさん mailto:sage [2019/10/21(月) 22:25:13 ID:Ol8k0rNq.net]
- 追記。シェルスクリプト自体にはsetuidは使えない。
- 952 名前:デフォルトの名無しさん mailto:sage [2019/10/21(月) 22:52:13.48 ID:pvaospDZ.net]
- Fedora10って10年前のかっ
su: must be run from a terminal にならんのだったらsuでいいんじゃないの。パスワード流すのは exec ででも
- 953 名前:デフォルトの名無しさん mailto:sage [2019/10/22(火) 00:44:01 ID:7OkeLCGH.net]
- ディレクトリにwが付いてればファイルは消せるけどなあ
- 954 名前:デフォルトの名無しさん mailto:sage [2019/10/22(火) 02:43:55 ID:T9lP8zyy.net]
- >>936
パーミッションは変えない方針でいきたいですね >>937 setuidという単語を初めて見たので、のちほど調べてみます。 >>939 su - <<EOF password EOF は試しましたが、ttyを経由しろ的なメッセージで怒られました 調べたところttyなしを許可する設定がsudorsにあるらしいですが、sudoは設定したくないため、できなそうです
- 955 名前:デフォルトの名無しさん mailto:sage [2019/10/22(火) 09:04:44.04 ID:xSNqVMSD.net]
- >>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
|

|