1 名前:シェルスクリプトライター mailto:sage [2011/12/10(土) 20:06:40.38 ] シェルスクリプトの総合スレです。 スクリプトのお勉強・自慢・腕試しなどにどうぞ。 □お約束 ・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。 bash/zsh/ksh/ashなどに依存する場合は明示しましょう。 Linuxユーザは/bin/shの正体がbashなので特に注意。 FreeBSDユーザは/bin/shの正体がashなので注意。 v7 shに一番近くて、現役のshは、OpenSolaris由来のheirloom sh。 src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/sh/ heirloom.sourceforge.net/sh.html ・csh/tcshのシェルスクリプトは推奨されません。 (理由は「csh-whynot」でググれ) ・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。 manや参考リンクを見ましょう。 aproposないしはman -kでそれらしい単語による簡単な検索もできます。 ・シェルスクリプトのことをシェルってゆーな ・シェルで使えるワイルドカード等は正規表現ではありません。 正規表現の話題はスレ違い(正規表現スレへ) □初心者へのアドバイス: ・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも RubyやPerlの方が適した仕事には素直にそちらを使いましょう。 ・知らないコマンドが出てきたらmanを引きましょう。 ・思い通りに動かないときは、まずは sh -x でトレースしましょう。 前スレ シェルスクリプト総合 その18 hibari.2ch.net/test/read.cgi/unix/1308195527/ 次スレは >>970 で。
201 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/22(日) 18:45:46.67 ] >>198 ざっとbinutils、grep、awk、sedのソース漁ってみてが、無いな
202 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/22(日) 18:50:17.20 ] >>201 ボンクラがメクラ撃ちしたって当たらないって事の証明だな。 オレは一発でtailを見つけたが。w lessもおそらくやってる。
203 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/22(日) 19:00:26.75 ] wc -c 1GB_file # 一瞬 < 1GB_file wc -c # 一瞬 cat 1GB_file | wc -c # 時間かかる
204 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/22(日) 19:51:25.77 ] >>203 これは俺にとって cat やめる理由になるな。 逆に言えばここまで出てきた書き込み程度ではあまり cat やめる気がしない。 でも何故だろうな。wc はソースしっかり読んだのに気が付かなかったなあ。
205 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/22(日) 20:02:12.51 ] 色んなシステムの様々なシェルスクリプトで共通的に関数を使いたいときって、どういう方法が 効率がよいだろう ・.profileとかで共通関数を定義する ・共通関数だけのスクリプトを作ってセットで使う ・がんばってシェルスクリプトに埋め込んでいく 他にある?
206 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/22(日) 20:10:17.98 ] >>190 > バイナリファイルだとcat通すと0x1dが消えたりしてファイル壊すから危険。 どこのcat?
207 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/22(日) 20:11:46.67 ] >>205 ふつうはファイル別にしてsourceする。
208 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/22(日) 20:12:38.04 ] >>205 その 2 番目は source で読み込むという意味でOK? . functions.sh
209 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/22(日) 22:52:35.96 ] >>200 なるほどね。確かにfstatだと区別できる。とても参考になった 特に前に戻るシークしか考えてなかったから、後半はその通りだわ。酷いレベルで気付かなかった
210 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/22(日) 23:23:48.64 ] システムコールのマニュアルは全部読んどくといい。 全部読んでも大した量じゃないから。
211 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/23(月) 00:18:56.40 ] >>203 wcに似たプログラムを自分で作ったことがあるんだけど、wcの方が処理が速いわけ んでなぜwcの方が速いのかソースを調べたことがある。すげえ勉強になったよ
212 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/23(月) 01:08:55.19 ] >>207 >>208 そうさね 現状は、sourceで読み込ませてる で、今は共通関数をfunctions.shとしてマージして使ってるんだが、対象システムで 使われてない関数も一緒になってるんで、サイズが無駄に大きくなってる しゃあねえのかなぁ
213 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/23(月) 01:33:25.92 ] 適切に分割して必要な分だけ読み込ませりゃいいじゃないか。
214 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/24(火) 00:19:15.61 ] シェルスクリプトの中で一行でpsql発行したいんだけどどう書けばいいかな postgresユーザに切り替えてからpsqlでselect文(time列から現在時刻の一ヶ月前からのデータだけをとる) 叩きたいんだけど TIME=1 sudo su - postgres -c 'psql -d データベース名 -c "select time from データベース名 where time > current_timestamp + '-${TIME} months';"' どうにもうまくいかない…ファイルとかにsql書いてやるのじゃなくて1行でやりたいんだけど。。
215 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/24(火) 01:28:32.12 ] sudo su - postgres -c 'psql -d データベース名 -c "select time from データベース名 where time > current_timestamp + '"'-${TIME} months';\"" かなぁ
216 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/24(火) 07:25:52.83 ] postgresユーザーで実行するコマンドをスクリプトにしておいて、そのスクリプトをsuで実行すればいいだけ >>ファイルとかにsql書いてやるのじゃなくて1行でやりたいんだけど。。 意味不明。
217 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/24(火) 08:10:02.57 ] >>215 ありがとうやってみる。 >>216 別ファイル?にして呼び出すということでしょうか。すみません初心者なので
218 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/24(火) 09:34:29.11 ] PGUSER=postgres PGPASSWORD=xxxx export PGUSER PGPASSWORD pgsql -d foo -A -q -c "SELECT * FROM hoge"; こんな感じでいけるんじゃないの?
219 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/24(火) 10:45:42.00 ] select文の中で不等号と変数を使いたいんだ そこがわからない
220 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/24(火) 11:04:18.96 ] zshの話?どこに使いたいの?
221 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/24(火) 11:09:52.37 ] >>214 postgresのselect文の構文は知らないので、↓ select time from データベース名 where time > current_timestamp + '-1 months'; このselect文が正しい結果を返すと仮定して、 >どうにもうまくいかない…ファイルとかにsql書いてやるのじゃなくて1行でやりたいんだけど。。 この「どうにもうまくいかない」ときに、sudo su ... コマンドから どのようなエラーメッセージが出されているのかを具体的に教えください。
222 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/24(火) 11:12:29.95 ] ああごめん219は218へのレスです。 bashです。
223 名前:218 mailto:sage [2012/01/24(火) 11:18:56.48 ] >>222 例えばMovableTypeへのアクセスだけど、これでいけたけど psql -d foo -A -q -c "SELECT log_id,log_created_on FROM mt_log where log_created_on > current_timestamp + '-${TIME} month';"
224 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/24(火) 12:06:10.33 ] su: option requires an argument -- c Try `su --help' for more information. months > chg_date;': -c: line 0: unexpected EOF while looking for matching `''months > chg_date;': -c: line 1: syntax error: unexpected end of file
225 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/24(火) 12:11:56.62 ] 上記のような感じです TIME=1 sudo su - postgres -c "psql -d データベース名 -c 'select time from テーブル 名 where current_timestamp + "-$TIME months" < time;'" 実行したのはこれです
226 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/24(火) 12:17:14.76 ] >>225 ダブルクォートの中で素のダブルクォート使っちゃ駄目。 そこでクォートが終了して別引数とみなされて su 側でエラーになってる。
227 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/24(火) 12:17:51.07 ] >>223 ユーザーを切り替えてからやるにはうしたらよいのでしょうかと
228 名前:218 mailto:sage [2012/01/24(火) 12:52:46.68 ] >>227 postgres(root)でデータベースの実行をしたいだけだよね? それを >>218 で書いているわけだけど、それとも私が勘違いしているのかな
229 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/24(火) 13:03:41.37 ] /path/to/doit ------------------ #/bin/sh TIME=1 psql -d データベース名 -c "select time from テーブル名 where current_timestamp + '-$TIME months' < time;" ------------------ # sudo su - postgres -c /path/to/doit
230 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/24(火) 13:12:38.92 ] 228さんごめんなさい 僕が勘違いしているのだと思います 教えていただいた方法でやってみます
231 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/24(火) 14:36:27.74 ] 教えていただいた方々ありがとうございました 228さんの方法で問題なくできました!
232 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/25(水) 22:21:21.41 ] total_size=`fdisk -l $device | grep Disk | awk '{print $5}'` $deviceには/dev/sdbとか このスクリプトをsudoで動かすと、total_sizeが空 rootになって実行すると、容量の数字が入ります。 どうして?
233 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/25(水) 23:47:33.70 ] PATHが通ってない。
234 名前:232 mailto:sage [2012/01/26(木) 12:25:23.62 ] >>233 PATHなの?
235 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/26(木) 12:35:38.39 ] sudoってその辺の環境変数再設定しなかったっけ
236 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/26(木) 20:01:15.66 ] >>232 sudoの中で変数に代入しても、sudoを抜けたら元のシェルの変数には入ってないよw と、ボケておこう。
237 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/26(木) 20:31:33.86 ] それボケなん?
238 名前:232 mailto:sage [2012/01/27(金) 12:23:26.54 ] >>236 sudoを抜けてないんですが
239 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/27(金) 13:27:36.89 ] やったことをもうちょい詳しく。
240 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/27(金) 15:10:58.95 ] つ total_size=`sudo fdisk -l $device | grep Disk | awk '{print $5}'`
241 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/27(金) 19:32:43.61 ] >>232 $ cat ./test.sh #!/bin/sh device=/dev/sda total_size=`fdisk -l $device | grep "Disk $device" | awk '{print $5}'` echo $total_size $ sudo ./test.sh 2> /dev/null 21474836480
242 名前:232 mailto:sage [2012/01/28(土) 21:12:44.61 ] すいません、遅くなりました ~$ cat mksd.sh #! /bin/sh device=$1 echo $device total_size=`fdisk -l $device | grep Disk | awk '{print $5}'` echo "total_size = $total_size" ~$ sudo ./mksd.sh /dev/sdb /dev/sdb total_size = ~$ su パスワード: # ./mksd.sh /dev/sdb /dev/sdb total_size = 3904897024 です
243 名前:232 mailto:sage [2012/01/29(日) 08:51:14.17 ] >>241 あれ、すいません見てませんでした ~$ cat mksd.sh #! /bin/bash device=$1 echo $device total_size=`fdisk -l $device | grep Disk | awk '{print $5}'` echo "total_size = $total_size" size=$[$total_size / 2] echo $size saito@ubuntu:~$ mksd.sh /dev/sdb mksd.sh: command not found saito@ubuntu:~$ ./mksd.sh /dev/sdb ./mksd.sh: line 9: /2: syntax error: operand expected (error token is "/2") ~$ su パスワード: # ./mksd.sh /dev/sdb /dev/sdb total_size = 3904897024 1952448512 なぜ、こうなるんでしょうか?
244 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/29(日) 09:09:10.62 ] >>243 面倒だから /proc/partitions の方使えよ。こっちならroot権限要らん。 1kバイトのブロック単位だから、1024倍な。 引数は /dev/sdaじゃなく、sdaだけで指定する。 grep/awkとか使わずに内部コマンドだけで組んでみた。 $ cat hoge.sh device=$1 while read x x blocks name && [ "$name" != "$device" ] do :; done < /proc/partitions total_size=$((blocks*1024)) $ ./hoge.sh sda 1000204886016
245 名前:243 mailto:sage [2012/01/29(日) 11:28:34.42 ] >>244 ありがとう、ございます。
246 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/29(日) 12:12:34.09 ] >>243 まだやってたんだ。 envやsetの出力差分とか見ないのか?
247 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/30(月) 08:01:56.00 ] >>242 ↓の結果を比べてみる、とか。 #! /bin/sh result=`fdisk -l /dev/sda` echo "$result"
248 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/30(月) 20:31:06.87 ] 標準入力からデータを読み込むようなbashスクリプトを書いています。 スクリプトの途中でread -s -n 1などとして画面をポーズしたいのですが、 標準入力にデータが渡されているため画面ポーズのためのreadにもそれが読み込まれてしまい、思ったように動作しません。 一旦ファイルディスクリプタの0番をクリアすれば良いのかと思うんですが、どのようにすれば実現できるでしょうか? 念のため、画面の一時停止はsleepなどでも可能なのは分かっていますが、 今回はreadで実現したいということでよろしくお願いします。
249 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/30(月) 20:35:24.72 ] >>248 read -s -n 1 < /dev/tty
250 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/30(月) 20:51:23.68 ] >>249 出来ました!こんな簡単な事だったんですね。 ついでに聞きたいんですが、一旦読み込まれた標準入力のクリアとかって無理なんでしょうか? それと/dev/ttyは移植性のある?書き方なんでしょうか。 質問ばかりですみません。
251 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/30(月) 20:56:36.52 ] >>250 exec < /dev/tty を実行すると、以降の行は標準入力が端末に戻るので read -s -n 1 だけで行けるようになる。 /dev/ttyはどのOSでも移植性がある。
252 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/30(月) 21:24:08.05 ] >>251 なるほど、そういうテクニックがあるんですね。 勉強になりました。 どうもありがとうございました。
253 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 01:12:06.63 ] >>251 流石に「どのOSでも」は言い過ぎではw まあsh動く環境ならまず大丈夫だとは思うから実害はないが
254 名前:名無しさん@お腹いっぱい。 [2012/01/31(火) 06:11:03.04 ] >>253 いいや、「どのOSでも」OK。 反論するなら反例を挙げろや、カス。
255 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 08:01:25.65 ] 縛りはOSだけでいいの? じゃ MS-DOS を挙げよう。 UNIX系OS特有なんだし、少なくともPOSIXに準拠してなきゃ持ってないよ。
256 名前:名無しさん@お腹いっぱい。 [2012/01/31(火) 08:27:24.42 ] >>255 お前ほんとにアホだなw MS-DOS ではシェル(スクリプト)は使えない。
257 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 08:32:02.94 ] >>253 もとの質問の >>249 read -s -n 1 < /dev/tty の readの -s -n オプションは bash依存だが、/dev/ttyがOS依存なんて話は聞いたことがない。 テストスクリプトとして ---- #!/bin/sh echo hoge > /dev/tty ---- があるとして、このスクリプトが「/dev/tty」が無いのが原因で動かないようなOSを 挙げてくれるかな。>>253 よ。まあ、無理だろうけどw
258 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 08:36:03.03 ] >>255 >POSIXに準拠してなきゃ持ってないよ /dev/ttyはPOSIX以前からあるよ
259 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 08:48:05.58 ] >>256-258 もうほっとけ。 質問者の質問に自分では答えずに、 正しく回答した回答者に後から間違ったつっこみを入れる >>253 のようなアホは いつの時代にも居るから。
260 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 09:28:37.54 ] FreeBSDでは/dev/ttyに直接アクセスしようとするまで存在しないのか。
261 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 09:39:19.39 ] アスペだらけのスレで「posixな」とか「シェルスクリプトが動く」などの制約を付けずに > /dev/ttyはどのOSでも移植性がある。 と言っちゃった>>253 の負け。
262 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 10:03:34.61 ] 確かにそこだけ切り取ればWindowsも無いわな
263 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 10:05:33.60 ] 負けは>>253 じゃなくて>>251 だった。
264 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 10:09:49.20 ] >>255 MS-DOS版の sh.exeでは /dev/tty動くぞ。sh.exe内部で解釈してるらしい。
265 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 12:57:13.51 ] cl.ly/1z1S0Y2g3n0L133x0X2M 写真の同じやつ整理したくてこんなん書いたんだけど, いかんせん遅い・・・ どうやったらもうちょっと早くなるかな?
266 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 13:33:07.43 ] >>265 遅い原因は毎回md5sumを呼んでいるから md5sum "$@"で求めておいて、その結果に対しての処理ならそれほど遅くない アルゴリズムもcut -d' ' -f1してsortしてuniq -dして重複ファイルのMD5だけ列挙 そのMD5でgrepすればファイル名も分かるだろ
267 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 13:39:35.46 ] 一気にmd5取る、md5でソート、ユニークなものだけ移動。残りは重複したファイル。 ユニークなファイルのリスト md5sum "$@" |sort -k 1 | uniq -w 32 |cut -d' ' -f 2
268 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 13:39:36.12 ] rsyncを--dry-runで走らせるくらいで十分、かつ速いんじゃないかと 何の検証もせず言ってみる
269 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 16:00:18.26 ] >>266-267 md5sumコマンド起動のオーバーヘッドより、 MD5計算時間の方がはるかに長いから、 毎回md5sumを呼んでも、ファイル名引数まとめてmd5sumを呼んでも ほとんど改善しないよw それより、まずはファイルサイズだけ見て、 同じファイルサイズのファイルが他にない場合は無条件でユニークなファイルとして md5sum計算対象から除外した方がよい。
270 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 16:06:28.42 ] 写真ファイルの同一検出ならファイル全体のmd5計算しなくても、 適当な位置で4KBくらい抜き出すのでもよさそうな
271 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 17:27:47.76 ] >>269 そんなところで高速化図ったんじゃねーよ。 見当はずれの言いがかり付けるって惨めだぞ。w
272 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 17:43:31.60 ] >>269 ソース読んでないだろwどのみちMac何だからそういう機能持ったアプリありそうだと思う。それ使った方がいい
273 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 18:01:40.88 ] 読んだけどわからなかっただけだろ。
274 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 19:11:12.35 ] openって何だろうと思ったらMacにはそういうコマンドがあるのか。
275 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 19:29:02.96 ] で、openってなに?
276 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 20:30:08.94 ] $ open foo.txt $ open -a /Application/TextEdit.app foo.txt $ open -a /Application/Emacs.app/Contents/MacOS/Emacs foo.txt こんなコマンド。
277 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 21:06:38.95 ] 適当なアプリ探して、バックグラウンドでそいつを渡すわけね
278 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 21:16:36.01 ] openはNEXTSTEP由来でファイルやディレクトリを開くコマンド
279 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/01(水) 11:43:16.32 ] OSXのopenコマンドは open . でカレントディレクトリをGUIで開かせるってのが一番使うかな
280 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/01(水) 12:05:32.98 ] blogに書いてろ
281 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/01(水) 12:58:13.47 ] >>269 は理解できたのかな? w
282 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/01(水) 16:07:29.43 ] md5 でなんとかなる程度なら さいしょから samefile なり samesame でよいのでは
283 名前:265 mailto:sage [2012/02/01(水) 17:06:16.13 ] cl.ly/221Q2p202r1f0g232K1Q みんなありがとう! こうかな?
284 名前:265 mailto:sage [2012/02/01(水) 17:09:15.95 ] あ,最初で移動してたら次のmd5sumの$@がないて言われるね\(^o^)/
285 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/01(水) 18:13:12.63 ] >>283 >>269 は全然わかってないマヌケな素人だから、奴の指摘は全部無視していい。 サイズなんて調べる必要ない。
286 名前:名無しさん@お腹いっぱい。 [2012/02/01(水) 23:15:24.01 ] testコマンドで質問です。 man testを見てみると、以下の2つのオプションの説明があります。 1.-nオプションのところ True if the length of string is nonzero. 2.stringオプションのところ True if string is not the null string. これらの違いは、何があるのでしょうか?それとも同じなのでしょうか? 出来ればサンプルスクリプトで説明していただけると助かります。
287 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/02(木) 00:06:01.32 ] stringオプション?
288 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/02(木) 00:19:26.32 ] >>286 直接引用しろ。うちでは等価って書いてある
289 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/02(木) 01:32:54.28 ] シェルスクリプトの勉強をしたいのですが、 何シェルがいいですか。
290 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/02(木) 01:40:36.62 ] これの事だな。 www.freebsd.org/cgi/man.cgi?query=test&apropos=0&sektion=0&manpath=FreeBSD+9.0-RELEASE&arch=default&format=html -n string True if the length of string is nonzero. string True if string is not the null string. 違い test -n $nonexistent; $? <= バグ? test -z $nonexistent; $?と矛盾する test $nonexistent; $?
291 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/02(木) 03:44:03.15 ] >>289 >>1 特記ない限り bourne shell ということは、それを選択すれば無難ということ。 Linux オンリーなら bash だろうけど。
292 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/02(木) 06:26:43.33 ] >>289 そんな貴方に、Windows Power Shell。
293 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/02(木) 08:40:58.52 ] >>290 なんだよ、矛盾するって。
294 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/02(木) 08:59:55.63 ] 自分が何調べてるかを理解してないだけに見える
295 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/02(木) 09:17:20.91 ] オペレータだけ与えるとstringと解釈するのか。エラーにしろよお。
296 名前: 忍法帖【Lv=4,xxxP】 mailto:sage [2012/02/02(木) 23:56:58.70 ] >>292 なんかUNIXのシェルより強力って書いてあるのが多いけどマジ?
297 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/03(金) 10:31:06.58 ] 「協力」の基準をどう考えるか次第でどうとでも
298 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/03(金) 20:58:42.50 ] いま流行のステマとか
299 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/04(土) 08:30:04.97 ] >>296 シェルそのものの機能は確かに強力だけど 肝心のコマンド資産がなさ過ぎて実用シェルとしてはなあ…
300 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/04(土) 08:42:10.79 ] パワシェルはインタラクティブに使うとしょぼい。
301 名前:265 mailto:sage [2012/02/04(土) 22:16:58.57 ] >>284 最終的にこれで出来ました! みなさんありがとうお(^ω^) cl.ly/152U342e2o212b2B1q3j