シェルスクリプト総合 その21
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
2012/11/15(木) 18:57:33.11□お約束
・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。
bash/zsh/ksh/ashなどに依存する場合は明示しましょう。
Linuxユーザは/bin/shの正体がbashまたはdashなので特に注意。
FreeBSDユーザは/bin/shの正体がashなので注意。
v7 shに一番近くて、現役のshは、OpenSolaris由来のheirloom sh。
http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/sh/
http://heirloom.sourceforge.net/sh.html
・csh/tcshのシェルスクリプトは推奨されません。
(理由は「csh-whynot」でググれ)
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
manや参考リンクを見ましょう。
aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルで使えるワイルドカード等は正規表現ではありません。
正規表現の話題はスレ違い(正規表現スレへ)
・シェルスクリプトのことをシェルってゆーな
□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
awkまたはperlの方が適した処理にはそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。
□回答者への注意事項:
・シェルスクリプトでの処理方法を質問しているのに、よくわからずに
「そういうのはperl使いましょう」と回答するのはやめましょう。
安易にperlに逃げずにシェルスクリプトで処理するのが頭のいいやり方。
前スレ
シェルスクリプト総合 その20
http://toro.2ch.net/test/read.cgi/unix/1339083351/
0410名無しさん@お腹いっぱい。
2013/04/09(火) 21:42:52.49shopt -s nullglob
>>409
すみませんが詳しい方のみ回答をお願いします
0411名無しさん@お腹いっぱい。
2013/04/09(火) 21:51:21.350412名無しさん@お腹いっぱい。
2013/04/09(火) 21:52:55.88おおそんなものが。ありがとうございます。
ちなみにPOSIXなshの範囲で同様なものはないですよね? bashでないshを
使うときもあるので...
0413名無しさん@お腹いっぱい。
2013/04/09(火) 21:53:48.330414名無しさん@お腹いっぱい。
2013/04/09(火) 22:02:46.38xterm -fn -*-fixed-medium-r-normal--14-*
みたいな感じでアスタリスクそのものをコマンドに渡すことがある。
たまたま-*-fixed-...みたいなファイルがカレントにある確率は無視できるので、
そのままパターンそのものを返すという仕様の方がコマンドラインではありがたい。
xterm -fn '-*-fixed-medium-r-normal--14-*'
みたいにきちんとクォートするのが厳密ではあるが。
0415名無しさん@お腹いっぱい。
2013/04/09(火) 22:55:49.85なるほど。
ちなみにそれはどこかからの引用でしょうか? どこかにこの展開ルールの
意味が説明されているのかなあと。
>みたいにきちんとクォートするのが厳密ではあるが。
ですかね。久しぶりにxfontselを覗いてみたら、私の環境では&や空白を含む
名前があったりするのでクォートしないとうっかりやらかしそうです。
0416 忍法帖【Lv=9,xxxP】(1+0:8)
2013/04/14(日) 22:23:25.30! -newer やったらあるファイルも含まれるよね?
0417名無しさん@お腹いっぱい。
2013/04/15(月) 01:55:26.21ttp://www.google.co.jp/?q=a#output=search&q=find+古いファイル
0418 忍法帖【Lv=9,xxxP】(2+0:8)
2013/04/15(月) 02:10:38.74! -newer やったらその時間も含まれちゃうよね?
0419名無しさん@お腹いっぱい。
2013/04/15(月) 07:11:37.160420名無しさん@お腹いっぱい。
2013/04/15(月) 07:24:31.73それでも そのふぁいる 以外のその時間も含まれちゃう
0421名無しさん@お腹いっぱい。
2013/04/15(月) 20:46:51.65取り除かないというシチュエーションが思いつかない。
同時かどうかなんてファイルシステムの時間精度によって異なる訳だし。
0422名無しさん@お腹いっぱい。
2013/04/15(月) 20:49:25.920423名無しさん@お腹いっぱい。
2013/04/15(月) 22:23:40.92+newerってなかったっけ。
0424 忍法帖【Lv=10,xxxPT】(1+0:8)
2013/04/15(月) 22:23:55.60日単位や月単位のディレクトリに更新日でファイルを振り分けたいのよ
例えば、
mkdir 2013-01
touch 201301010000 start
touch 201302010000 end
find . -newer start ! -newer end | xargs -I{} mv {} 2013-01
みたいな。
んでも、201302010000のファイルも移動しちゃうじゃんね。逆に201301010000のファイルは移動しないし……
なんかいい方法ある?
0425名無しさん@お腹いっぱい。
2013/04/16(火) 00:54:28.670426名無しさん@お腹いっぱい。
2013/04/16(火) 18:57:33.17renameとか分かるように書きたいんだが、何か方法は有りますか?
0427名無しさん@お腹いっぱい。
2013/04/16(火) 19:01:10.23それぞれの言語に流儀ってもんがあるんだ。
どう考えてもそのまま覚えたほうが身のためだろ。
0428名無しさん@お腹いっぱい。
2013/04/16(火) 19:52:45.30理由なんてないよ
昔の人がそうやって短縮してそのまま放置して
今なおそうとしても 昔のコードが動かなくなるから
もうにっちもさっちもいかなくなってるだけ
0429名無しさん@お腹いっぱい。
2013/04/16(火) 20:12:34.44長くてもパッと見てどういう処理なのか分かりたいんだ
オプション覚えろって言われたらそれまでだが
0430名無しさん@お腹いっぱい。
2013/04/16(火) 20:13:20.180431名無しさん@お腹いっぱい。
2013/04/16(火) 20:15:03.29$ tar zxvf hage.tar.gz
ってタイプすれば済むところを
$ tapeArchiver --gzip --extract --verbose --file hoge.tar.gz
とは書きたくないだろ。
まあ最近は長いオプションと短いオプション両方用意してるのも多いけど。
あとelifとかelse if とかelsifの違いは本当に好みの問題だな。
elifに文句行ってたらpythonなんて使えんぞ
0432名無しさん@お腹いっぱい。
2013/04/16(火) 20:26:00.520433名無しさん@お腹いっぱい。
2013/04/16(火) 22:37:18.080434名無しさん@お腹いっぱい。
2013/04/16(火) 22:58:56.660435名無しさん@お腹いっぱい。
2013/04/17(水) 00:02:40.83#
0436名無しさん@お腹いっぱい。
2013/04/17(水) 00:13:35.86alias
0437名無しさん@お腹いっぱい。
2013/04/17(水) 00:50:48.02慣れろ。よく使われるオプションなんて、似たり寄ったりだ。長い物には巻かれとけ。
-v は verbose
-h は help
-f は force
-f は file
-r は…シラネ。
0438名無しさん@お腹いっぱい。
2013/04/17(水) 01:07:51.840439名無しさん@お腹いっぱい。
2013/04/17(水) 01:32:02.460440名無しさん@お腹いっぱい。
2013/04/17(水) 01:49:06.960441名無しさん@お腹いっぱい。
2013/04/17(水) 05:34:53.540442名無しさん@お腹いっぱい。
2013/04/17(水) 06:44:29.58て歌あったよな
てんむすだっけ
0443名無しさん@お腹いっぱい。
2013/04/17(水) 07:17:40.10カタカナ表記でそれ間違える奴よくいるが、英語スペルで間違えてる奴初めて三田。
0444名無しさん@お腹いっぱい。
2013/04/17(水) 08:40:04.91あースマフォのゴダン入力で悩んだ末に間違えたよ。qwertyキーボードなら指が勝手に動くだろうから大丈夫。
0445名無しさん@お腹いっぱい。
2013/04/17(水) 09:36:01.74-r, --recursive
-再, --再帰
な。
0446名無しさん@お腹いっぱい。
2013/04/17(水) 09:39:18.82-r はそのなかでも飛びぬけてバラバラだよな
0447名無しさん@お腹いっぱい。
2013/04/17(水) 09:48:24.98ddコマンドなんとかしろ。if= of= bs= とか、UNIXのコマンドじゃないみたいな世界観。
0448名無しさん@お腹いっぱい。
2013/04/17(水) 10:33:08.22まああれはシンタクスシュガーだけど
0449名無しさん@お腹いっぱい。
2013/04/17(水) 10:34:13.400450名無しさん@お腹いっぱい。
2013/04/17(水) 10:35:08.44最近はハイフンつきオプション使えるtarも多いっしょ。
0451名無しさん@お腹いっぱい。
2013/04/17(水) 11:39:48.22そうなのか
あれハイフン使えるのって最近の話だったのか
逆に思ってた
UNIX文化は業が深いな
0452名無しさん@お腹いっぱい。
2013/04/17(水) 12:42:32.11arとかddは他のOSの類似コマンドの模倣だったはず。
(t)ar, dd, findが鬼門かな?
cpioもdebianのdpkgが使ってるんだっけな?
0453名無しさん@お腹いっぱい。
2013/04/17(水) 13:24:50.18debはar系だな
0454名無しさん@お腹いっぱい。
2013/04/17(水) 13:33:31.990455名無しさん@お腹いっぱい。
2013/04/17(水) 15:11:02.400456名無しさん@お腹いっぱい。
2013/04/17(水) 15:13:04.790457名無しさん@お腹いっぱい。
2013/04/17(水) 15:59:03.360458名無しさん@お腹いっぱい。
2013/04/17(水) 19:38:24.54psのオプションのカオスっぷりに比べればまだ分かり易い方だと思う
0459名無しさん@お腹いっぱい。
2013/04/17(水) 20:23:31.15headとかの+スイッチとか、commの-123とか、
0460名無しさん@お腹いっぱい。
2013/04/17(水) 20:43:44.350461名無しさん@お腹いっぱい。
2013/04/17(水) 21:33:08.69headの + ってどんなのなのなの?
0462名無しさん@お腹いっぱい。
2013/04/17(水) 21:44:13.25ファイルの末尾3行を除いて表示
0463名無しさん@お腹いっぱい。
2013/04/17(水) 21:52:02.520464名無しさん@お腹いっぱい。
2013/04/17(水) 21:57:46.870465名無しさん@お腹いっぱい。
2013/04/17(水) 21:58:20.81tail -5 とかが突然使えなくなって tail -n 5 に書き換えろという話だったが
既存スクリプトへの影響が大き過ぎて
結局 tail -5 とかの形式だけは使えるようにされたんだよな。
0466名無しさん@お腹いっぱい。
2013/04/17(水) 22:17:23.080467名無しさん@お腹いっぱい。
2013/04/17(水) 23:03:00.570468名無しさん@お腹いっぱい。
2013/04/18(木) 09:10:20.74sort も忘れるな。
0469名無しさん@お腹いっぱい。
2013/04/18(木) 09:17:44.11psがカオスなのはlinuxだけじゃね?
BSDとSysVはまったく違うけど、それぞれの中では一貫してる。
linuxはそのまったく違うものを両方使えるようにした上で
さらにgnu long optionsも採用するとかいうバカなことをやって混乱の極みに。
0470名無しさん@お腹いっぱい。
2013/04/18(木) 22:08:44.740471名無しさん@お腹いっぱい。
2013/04/21(日) 20:35:11.01ユーティリティのコマンドオプションに統一性が無いって、どうしてこうなってしまったんだろう
0472名無しさん@お腹いっぱい。
2013/04/21(日) 20:41:46.60/usr/local/bin/bashでも/usr/local/bin/zshでも
好きなシェル使えばいいじゃない
0473名無しさん@お腹いっぱい。
2013/04/21(日) 21:12:21.58いまどき、/bin/bash じゃないの?
0474名無しさん@お腹いっぱい。
2013/04/21(日) 21:18:16.310475名無しさん@お腹いっぱい。
2013/04/21(日) 21:27:21.72ユーティリティのコマンドオプションに統一性が無いとか言ってるし。
それはどのシェルでも変わらない。
0476名無しさん@お腹いっぱい。
2013/04/21(日) 21:27:45.570477名無しさん@お腹いっぱい。
2013/04/21(日) 21:29:31.890478名無しさん@お腹いっぱい。
2013/04/21(日) 21:31:17.80471はよくわかってないからシェル一般に対して、/bin/shと言ったりする。
0479名無しさん@お腹いっぱい。
2013/04/21(日) 21:33:16.90もし本当の/bin/shの意味だったら、
「ユーティリティのコマンドオプションに統一性が無い」
の文章につながらない。
0480名無しさん@お腹いっぱい。
2013/04/21(日) 21:37:08.55ほんとのとこは本人しかわかんないんだし。
「ユーティリティのコマンドオプションに統一性が無い」ってのも、
別にその「シェル一般?」とも関係ないし
0481名無しさん@お腹いっぱい。
2013/04/21(日) 22:11:48.86そろそろ正解発表を頼む。
0482471
2013/04/21(日) 22:40:23.29というのが今の疑問です
/bin/shならびにUNIXシェル一般に興味無くしたってのは早とちりでしたご免ください
いつもお世話になってます
0483名無しさん@お腹いっぱい。
2013/04/21(日) 23:02:39.87バージョン表示とオンラインヘルプだけは、統一あっても良い気がするな。
たまーに違うのが混ざっているからなやましい
0484名無しさん@お腹いっぱい。
2013/04/22(月) 00:00:32.490485名無しさん@お腹いっぱい。
2013/04/22(月) 00:04:04.98--help
とか
-h
とか
省略形と思ったら、そうでもないし、どうなってんの
0486名無しさん@お腹いっぱい。
2013/04/22(月) 00:05:00.13君が1人で全部作り直せば互換性がうまれるよ。でもショートのオプション数は限りがあるね。どのように設計するのか見物です。
>>483
man hogeで統一されている。Sh組み込みはshのmanかhelpにしかなかったりするか。
0487名無しさん@お腹いっぱい。
2013/04/22(月) 05:09:33.94具体的にどのコマンドのどのオプションが不満で
自分が開発者ならどういう名前に変更するか挙げてみてくれ
0488名無しさん@お腹いっぱい。
2013/04/22(月) 05:15:05.29基本的に、GNU形式の長いオプションが -- で、
旧来の短い(一文字)オプションの場合が - でしょ?
ちなみにコマンドラインから直接実行する場合は短いオプションで、
スクリプト等に記述する場合は(分かりやすくするため)長いオプションを使ったりする。
0489名無しさん@お腹いっぱい。
2013/04/22(月) 14:59:57.78オプションの意味がアプリごとにバラバラで統一感無い
ってのが統率取れてない印象を与えると思う。
0490名無しさん@お腹いっぱい。
2013/04/22(月) 16:13:56.87アプリの中で統一されていれば、他のアプリと異なっていても構わないと思うが。
他のアプリやインターフェイスと統一するなら、どこまで統一するのかその範囲は?
Windows/MacOSX/Unix系を全て統一?
GNUアプリを全て統一?
0491名無しさん@お腹いっぱい。
2013/04/22(月) 17:08:44.33そんなでかい話じゃないが、紳士協定レベルというか
オプションの意味のガイドラインくらいあってもよかったよな
-vや-hの意味くらい統一しとけよという
0492名無しさん@お腹いっぱい。
2013/04/22(月) 17:21:27.15あきらめて覚えるしかないよ。
0493名無しさん@お腹いっぱい。
2013/04/22(月) 19:12:57.59-iや-rなんかはけっこう上位に食い込むと思う
0494名無しさん@お腹いっぱい。
2013/04/22(月) 19:14:57.790495名無しさん@お腹いっぱい。
2013/04/22(月) 19:26:36.66んで他のプラットフォームは統一されてんのかっていう
0496名無しさん@お腹いっぱい。
2013/04/22(月) 19:35:58.93一つ、コマンドの動作に関するオプショナルな指定は、ハイフン+アルファベット一文字とす
一つ、オプションのアルファベットは、それを表す英単語の先頭の一文字になるよう努めるものとす
複数のオプション指定はハイフンの後に同時に書いても良いことにする(例 ls -la)
追加で指定してもよいオプションではなくて、原則指定すべきサブコマンドはハイフンはなしにする(例 tar x)
こういうのも暗黙のルールに加わった。
こういうルールは、決まりがあるわけではなく、コマンド作成者がなんとなくそうしている約束事だった。
コマンドがバージョンアップし、オプションが増え、文字が足りなくなったり、被ったりが目立つようになった。
さらにBSD系、System/V系に分岐し、それぞれでコマンドのオプションが追加された。
コマンドの私家版が独自に配布されたりして、もう大変な状況に…
GNUコマンドが降臨し、ハイフン+一文字形式に加えてハイフン+ハイフン+文字列(等号+文字列)形式が普及、今日に至る。
-h や -v が同じじゃないのは、別々の意味で先に使っていたから仕方ない。
0497名無しさん@お腹いっぱい。
2013/04/22(月) 19:57:02.89オプション統一して欲しい人はコマンドラインアプリの作者にメール送ったらいいんじゃないの
それか自分自身か思うオプションに変更するラッパーでも書くか。
0498名無しさん@お腹いっぱい。
2013/04/22(月) 21:07:57.82用語間違えてた?
manでなく、--helpとかで出てくるやつをオンラインヘルプ言うと思ってた。
一応、GNU系ならhelpとversionはコード規約的な指標にはなってた気がする。helloworldレベルだけど。。。
0499名無しさん@お腹いっぱい。
2013/04/22(月) 22:47:59.51http://www.gnu.org/prep/standards/standards.html#Command_002dLine-Interfaces
へえ、こんなのあるんだ
0500名無しさん@お腹いっぱい。
2013/04/22(月) 22:55:36.850501名無しさん@お腹いっぱい。
2013/04/22(月) 23:43:29.700502名無しさん@お腹いっぱい。
2013/04/22(月) 23:44:15.62おまえのせいでみんな迷惑してるんだけど
0503名無しさん@お腹いっぱい。
2013/04/23(火) 00:00:55.590504名無しさん@お腹いっぱい。
2013/04/23(火) 00:06:06.600505名無しさん@お腹いっぱい。
2013/04/23(火) 01:45:12.760506名無しさん@お腹いっぱい。
2013/04/23(火) 02:12:16.82そんなにみんなが使ってくれるとは思わなかったから。コマンドラインよりAPIから呼ぶのが殆どとかもあるかもだけど。
>>498
そういう解釈もあると思う。
ただドキュメント読むためだけにプログラムを実行するのもなぁ。
http://sp.e-words.jp/w/E382AAE383B3E383A9E382A4E383B3E38398E383ABE38397.html
印刷物ではなく、コンピュータ上で閲覧する 形で用意されているヘルプ文書のこと。
0507名無しさん@お腹いっぱい。
2013/04/23(火) 11:32:05.750508名無しさん@お腹いっぱい。
2013/04/23(火) 12:21:44.52他のコマンドのことを考慮はしたと思うが、後から作られるコマンドのオプションと
バッティングしないことまでは考えられなかったであろう。
私は迷惑してないですけどね。
0509名無しさん@お腹いっぱい。
2013/04/23(火) 13:15:52.18嫌だからといって、じゃぁ何に乗り換えるの?
まともにPOSIXにも準拠してない閉鎖的なOSは、コマンド体系やオプションに統一が図られてるのかな?
てか、それ以前に使えないでしょ?
■ このスレッドは過去ログ倉庫に格納されています