シェルスクリプト総合 その20
レス数が1000を超えています。これ以上書き込みはできません。
0001名無しさん@お腹いっぱい。
2012/06/08(金) 00:35:51.19スクリプトのお勉強・自慢・腕試しなどにどうぞ。
□お約束
・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。
bash/zsh/ksh/ashなどに依存する場合は明示しましょう。
Linuxユーザは/bin/shの正体がbashなので特に注意。
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でそれらしい単語による簡単な検索もできます。
・シェルスクリプトのことをシェルってゆーな
・シェルで使えるワイルドカード等は正規表現ではありません。
正規表現の話題はスレ違い(正規表現スレへ)
□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
RubyやPerlの方が適した仕事には素直にそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。
前スレ
シェルスクリプト総合 その19
http://toro.2ch.net/test/read.cgi/unix/1323515200/
0951名無しさん@お腹いっぱい。
2012/11/05(月) 11:07:47.92そのディレクトリにcdが可能かどうかチェックはしたいけど
カレントディレクトリを変更したいわけじゃない、という場合に使う。
0952名無しさん@お腹いっぱい。
2012/11/05(月) 11:10:09.44それは (cd hoge) で十分。わざわざ/usr/bin/cd hogeとかする必要なし。
0953名無しさん@お腹いっぱい。
2012/11/05(月) 11:51:33.940954名無しさん@お腹いっぱい。
2012/11/05(月) 11:54:39.66alias bg fg jobs unalias wait
もちろん、「文法チェック目的」以外で。
0955名無しさん@お腹いっぱい。
2012/11/05(月) 11:56:21.15/usr/bin/cd を使っちゃいけない理由:
/usr/bin/cdがインストールされていない環境で動かないのでポータビリティを損ねる。
0956名無しさん@お腹いっぱい。
2012/11/05(月) 11:58:35.93インストールされている環境でしか使わないスクリプトなら問題ない。
0957名無しさん@お腹いっぱい。
2012/11/05(月) 12:18:17.16POSIX Shell & Utilitiesに適合するため。
0958名無しさん@お腹いっぱい。
2012/11/05(月) 12:26:50.85POSIX Shell & Utilitiesに適合することは意味のある用途じゃないので不正解。
はい、やり直し
↓
0959名無しさん@お腹いっぱい。
2012/11/05(月) 12:32:15.460960名無しさん@お腹いっぱい。
2012/11/05(月) 12:32:57.29うちの環境だと無いっぽいわ
0961名無しさん@お腹いっぱい。
2012/11/05(月) 12:37:40.88/usr/bin/cd だったら、「cd可能かどうかチェックする」という具体用途が一応示せる。
(苦し紛れだろうけど)
そういう具体例を聞いてるんだよ。
たとえば /usr/bin/fg って何に使うの?
プロセス変わるからジョブコンできるはずないし。
0962名無しさん@お腹いっぱい。
2012/11/05(月) 12:44:25.01どこにあるんだいったい・・・
0963名無しさん@お腹いっぱい。
2012/11/05(月) 13:29:24.71http://docs.oracle.com/cd/E26924_01/html/E29112/cd-1.html
これにも>>951しか用途載ってないな。
0964名無しさん@お腹いっぱい。
2012/11/05(月) 14:25:29.24>>957の通り。規格読んでみ。
builtinもexec出来ないといけないから。
0965名無しさん@お腹いっぱい。
2012/11/05(月) 14:27:27.340966名無しさん@お腹いっぱい。
2012/11/05(月) 14:50:01.96builtinもexec出来ないといけないからという理由なら、
trapとかsetとかのbuiltinもexec出来ないといけないことになる。
(実際にはtrapとかsetとかは外部コマンド版はない)
なぜ cdとかaliasとかは意味のない外部コマンド版があって、
trapとかsetとかには外部コマンド版がないのか、という疑問は解決しない。
0967名無しさん@お腹いっぱい。
2012/11/05(月) 20:50:10.49ここで意味がないとか言っても何も解決しない。
0968名無しさん@お腹いっぱい。
2012/11/05(月) 20:52:30.500969名無しさん@お腹いっぱい。
2012/11/05(月) 21:44:16.98「builtinコマンドもexec経由で起動できるように外部コマンドを配置」
って決めちゃって、そんなの意味ないって下から指摘あったけど
決めた人が偉い人で引込みがつかず、決まってしまっただけのこと。
だから、実用性優先のLinuxとかではそんな変な仕様には準拠せず、
/usr/bin/cdとかアホなコマンドはインストールしないようになってる。
0970名無しさん@お腹いっぱい。
2012/11/05(月) 22:01:57.65> シェルやシェルスクリプトをよく知らない人が
> 「builtinコマンドもexec経由で起動できるように外部コマンドを配置」
> って決めちゃって、そんなの意味ないって下から指摘あったけど
> 決めた人が偉い人で引込みがつかず、決まってしまっただけのこと。
それはどこ情報?
0971名無しさん@お腹いっぱい。
2012/11/13(火) 10:00:15.55で、SOME_DIR 内に一つ見つかったら一回 SOME_COMMAND して、それで終わり、
次のファイルはもう処理しない、という方法はありますか ?
-exit とかあったような気がして man 見直したら、見当たらない…
0972名無しさん@お腹いっぱい。
2012/11/13(火) 10:57:30.970973971
2012/11/13(火) 11:40:06.17しかし、なぜ man find に出てこないんだろう…
0974名無しさん@お腹いっぱい。
2012/11/13(火) 11:42:39.490975名無しさん@お腹いっぱい。
2012/11/13(火) 12:05:46.68OSは何?
0976名無しさん@お腹いっぱい。
2012/11/13(火) 12:18:32.270977名無しさん@お腹いっぱい。
2012/11/13(火) 12:22:31.28*The Regents of the University of California. All rights reserved.
と書いてあるfindにもあるけど。
0978名無しさん@お腹いっぱい。
2012/11/13(火) 12:34:55.40ハイ論破
0979名無しさん@お腹いっぱい。
2012/11/13(火) 12:38:30.29ハイポンパ
0980971
2012/11/13(火) 13:17:00.75-quit は、効くけど、/usr/bin/man find には出てこないという…
0981名無しさん@お腹いっぱい。
2012/11/13(火) 13:43:17.370982名無しさん@お腹いっぱい。
2012/11/13(火) 14:51:52.160983名無しさん@お腹いっぱい。
2012/11/13(火) 18:55:48.290984名無しさん@お腹いっぱい。
2012/11/13(火) 19:03:34.72日本語manに至っては、数年前から誤記が放置だ
0985名無しさん@お腹いっぱい。
2012/11/13(火) 19:12:08.46今後はアンサーブックを使えって聞いたよ。
もちろん閲覧はHotJavaを使うこと。
0986名無しさん@お腹いっぱい。
2012/11/13(火) 20:28:03.43お前も放置してる1人だろ。
0987名無しさん@お腹いっぱい。
2012/11/14(水) 10:18:00.47MacOSXもその状況をひきずっていそう
0988名無しさん@お腹いっぱい。
2012/11/14(水) 11:31:26.58にはあるよ。いつからあるかは知らない。
0989名無しさん@お腹いっぱい。
2012/11/14(水) 12:06:38.79コメントが
Document -quit, four and a half years after it was implemented.
だと。
0990名無しさん@お腹いっぱい。
2012/11/14(水) 14:08:21.73まーじーでーーー
0991名無しさん@お腹いっぱい。
2012/11/14(水) 20:51:36.07成り立つのだよね
0992名無しさん@お腹いっぱい。
2012/11/14(水) 21:39:15.28男らしくない。
BSD にはいらん。
軟弱な Linux でも使ってろ。
0993名無しさん@お腹いっぱい。
2012/11/15(木) 00:12:41.93ってか次スレ建てろよ>>980
0994名無しさん@お腹いっぱい。
2012/11/15(木) 16:34:11.28実物より古いバージョンのままなんて日常茶飯事。
0995名無しさん@お腹いっぱい。
2012/11/15(木) 18:59:46.37#!/bin/sh
/usr/bin/cc $argv[1].c -o $argv[1] -lm
0996名無しさん@お腹いっぱい。
2012/11/15(木) 19:28:10.211点。
ハイ次の方どうぞ
0997名無しさん@お腹いっぱい。
2012/11/15(木) 19:30:19.71(´・ω・`)
0998名無しさん@お腹いっぱい。
2012/11/15(木) 19:41:03.390999名無しさん@お腹いっぱい。
2012/11/15(木) 19:43:50.00/bin/shじゃねぇのか?
C,PHP,Perlとかならおkだろうけど
shなら$1ちゃうんかい?
1000名無しさん@お腹いっぱい。
2012/11/15(木) 19:45:03.49動いてはいるんだけども
cc:エラー:[1].c:そのようなファイルやディレクトリはありません
って怒られる...(´・ω・`)あるのに
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。