1 名前:名無しさん@お腹いっぱい。 [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。 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でそれらしい単語による簡単な検索もできます。 ・シェルで使えるワイルドカード等は正規表現ではありません。 正規表現の話題はスレ違い(正規表現スレへ) ・シェルスクリプトのことをシェルってゆーな □初心者へのアドバイス: ・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも awkまたはperlの方が適した処理にはそちらを使いましょう。 ・知らないコマンドが出てきたらmanを引きましょう。 ・思い通りに動かないときは、まずは sh -x でトレースしましょう。 □回答者への注意事項: ・シェルスクリプトでの処理方法を質問しているのに、よくわからずに 「そういうのはperl使いましょう」と回答するのはやめましょう。 安易にperlに逃げずにシェルスクリプトで処理するのが頭のいいやり方。 前スレ シェルスクリプト総合 その20 toro.2ch.net/test/read.cgi/unix/1339083351/
2 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/15(木) 19:26:11.32 ] Q. シェルは UNIX の勉強に使えますか? A. シェルは UNIX に慣れた人間がスクリプトを書いて楽するのには向いていますが、 UNIX の勉強には向いていません。
3 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/15(木) 19:55:58.11 ] 今月はじめ、職場に新しいPC(Core i7の結構ハイエンド構成)が入りました。 多分私が運用保守をまかされそうな雰囲気です。業務的にとある構造分析や シミュレーションなど行う必要があり、制御コマンドとしてシェルスクリプトを 使用するのは聞いていたのですが、そのファイルを開いて1行目に書かれていたのは #!/bin/tcshという文字列でした。 「うへぇ〜、よりによってtcshかよ」 ファイル記述子のリダイレクト不可、クオートのネスティング等に無理あり、 今の奴でさえシェル関数は使えないし、パイプラインの終了ステータスもおかしいし、 今時の担当者が扱ってセキュリティは大丈夫なのか不安はつきませんし、 スクリプトとしてのcshは嫌われるのでネット上の情報も少なく調べるのも大変です。 おそらく導入に際して、大学など教育機関で最初にcshに触れて刷りこまれた人間が 強気の知ったかぶりをして発言権を得て「俺流」をつらぬき紛れ込ませたのでしょう。 昔、当時、シェルで唯一aliasやhistoryやジョブコントロールの機能が使えた cshは大学など教育機関に浸透していて、日本のシェル界に多くのバカが輩出しました。 これから私は、おそらくそういうバカが、$*でスペース入りファイル名が扱えないとか $<でファイルから読めないのかとか、変数に*を入れた場合だけ構文エラーになって 実行できないなどと、シェル通気取りの偏ったどうでもいい我侭を言い出し (だからcshスクリプト書くんじゃねーよ)それと戦わなければならないのでしょう。 そして時代によって決着している、過去25年のシェル界隈のくだらないそれらの議論が 再現され、それに巻き込まれるのでしょう。もう今からうんざりです。 だからお願いです。教育現場ではbashでもzshでもkshでもashでも Bourne shでもなんでもいいですがBシェル系のシェルにしてください。 教育機関で懐古趣味のバカを量産されると現場が非常に苦労するのです。
4 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/15(木) 20:00:38.47 ] >>2 シェルとシェルスクリプトの区別がついてないアホレスをコピペすんなよ
5 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/15(木) 20:05:57.42 ] 確かにww シェルがないとコマンド実行すらできないし 何がユーザーの入力を受け付けるんだ
6 名前:名無しさん@お腹いっぱい。 [2012/11/15(木) 20:10:10.87 ] 前スレ最後の頓珍漢は私です アドバイス通り$args[1]→$1にしたらすんなりいきました。 ありがとうございました。スレなめるように見て勉強させて頂きます。
7 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/15(木) 20:30:38.10 ] 俺のもなめて。
8 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/18(日) 11:50:01.58 ] Gnome Shellのスクリプトの話題もここでいいのか?
9 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/20(火) 18:14:10.06 ] 以下のような文章があったとします。 〜aaa〜bbbaaa〜bbbaaa〜bbb〜 (〜は文字数の定まっていない文字列を表しています。) ここから、それぞれ最初のaaa〜bbbだけを抽出、真ん中のaaa〜bbbだけを抽出、最後のaaa〜bbbだけをgrepなどで抽出したい時、どう正規表現で表せばよいのでしょうか?
10 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/20(火) 18:23:34.33 ] grepは抽出するというより、マッチした行は全部表示しちゃうけど? sedなら sed 's/\(aaa.*bbb\)\(aaa.*bbb\)\(aaa.*bbb\)/\2/' みたいな?
11 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/20(火) 18:31:07.64 ] >>9 >>1 >正規表現の話題はスレ違い(正規表現スレへ)
12 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/20(火) 18:34:56.83 ] >>11 いや、それは >>1 > ・シェルで使えるワイルドカード等は正規表現ではありません。 って話だからまた違う。
13 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/20(火) 18:38:12.26 ] >>12 恥ずかしい奴。
14 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/20(火) 18:40:22.60 ] 正規表現スレはまともに機能してないし、ここでいいだろ。
15 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/20(火) 18:45:22.53 ] だな。
16 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/20(火) 18:47:12.07 ] 正規表現スレがまともに機能してないというなら まともに機能させるためにも正規表現スレに行くべき。 sedスレもあるし、sedスレでもいいよ。
17 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/20(火) 20:02:12.24 ] 了解です 正規表現スレに行ってきます >>10 grep -oとしてマッチした部分のみ出力しようと考えてます
18 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/20(火) 20:25:59.98 ] >>9 ってかこれ俺も分かんないんだけど どうやんのさ
19 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/20(火) 21:32:57.96 ] >>17 $ echo "〜aaa〜bbbaaa〜bbbaaa〜bbb〜" | grep -o "aaa〜bb" ってやったら3個表示されちゃうな。。。
20 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/21(水) 14:15:55.18 ] あとは、sed -n 1p 等でいいじゃない
21 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/22(木) 18:12:58.50 ] あるシェルスクリプトに渡された空白を含む可変長引数を、別のコマンドに転送したいのですが書き方がわかりません 具体的にはシェルスクリプトhoge.shを./hoge.sh "a b" "c d"…と実行すると,内部で別のコマンドcmdを引数"a b" "c d"…で実行するような場合です. 引数の数が固定であればhoge.shの中にcmd "$1" "$2"…と記述すれば良いのですが,可変長に対応しようと$*をそのまま用いると 展開されてcmd a b c dというコマンドになり,引数が4つになります. どなたかわかる方がいましたら,ご教授ください.
22 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/22(木) 18:17:06.55 ] >>21 "$@"
23 名前:22 mailto:sage [2012/11/22(木) 18:22:31.99 ] ありがとうございます.これで彼女ができそうです><
24 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/24(土) 16:38:01.78 ] ffmpeg(avconv)では連番のpngファイルから動画ファイルを作り出すことができます. このような機能を利用して,画像生成スクリプトの吐き出す静止画群から動画を作っています. これを,中間ファイルのpngを作ることなく実現したいのですが何かいい方法はないでしょうか. 静止画をまとめて標準出力に書き出すことはできそうなので,標準入力からの複数の静止画を avconvが認識できれば簡単に実現できそうな気がするのですが.
25 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/24(土) 16:41:34.97 ] >>24 ↓ 動画編集ソフト toro.2ch.net/test/read.cgi/unix/1055825616/
26 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/24(土) 20:36:48.33 ] >>24 良い事を教えてやろうwebブラウザでwww.google.com/ を開くんだ。 まんなかにテキストボックスがあらわれるから ffmpeg jpeg ここまで入れれば候補に ffmpeg jpeg 動画 がでてくるから、それをクリックする。あとは上から順番に開いていけばいい。 わかったか? www.google.com/ はブックマーク(お気に入り)しとくと捗るぞ。
27 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/24(土) 21:15:55.69 ] すみませんが詳しい方のみ回答をお願いします
28 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/25(日) 03:38:19.25 ] 賢者タイムの方のみお願いします
29 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/25(日) 09:34:07.71 ] おかずもあげずに
30 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/28(水) 00:27:12.03 ] 質問です。 まず、以下のファイルがあります。 -------- $ cat hoge.dat aaa bbb ccc -------- 次に、下記のスクリプトを用意します。 -------- $ cat hoge.sh #!/bin/sh cat hoge.dat | while read -r line do alldata=$alldata$line done echo $alldata -------- 処理結果は以下のようになりました。 -------- $ ./hoge.sh $ -------- 自分のイメージとしては、処理結果は、aaabbbcccと表示されるはずなのですが、 なぜ表示されないのでしょうか?表示するためにはどうすればいいでしょうか?
31 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/28(水) 00:52:03.02 ] >>30 パイプ使うとサブシェルが作成されるから。この場合ループの中身はサブシェルで実行される。 bashでこれを避けるにはcatとパイプの代わりに<でファイルを渡せばいい。 #!/bin/sh while read -r line do alldata=$alldata$line done < hoge.dat echo $alldata
32 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/28(水) 00:54:33.58 ] ただのファイルなら < でいいけど、どうしてもパイプが必要ならこうかな #!/bin/sh alldata=`cat hoge.dat | (while read -r line do alldata=$alldata$line done; echo $alldata)` echo $alldata あんまりエレガントじゃないか
33 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/28(水) 01:02:24.57 ] <() 使うのはナシですか
34 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/28(水) 07:45:45.49 ] sh(bash)ではなく、kshに変えるのが一番手っ取り早いな。
35 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/28(水) 09:52:28.20 ] #!/bin/sh while read -r line do alldata=$alldata$line done <<EOF `cat hoge.dat` EOF
36 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/28(水) 10:07:00.10 ] ほほー
37 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/28(水) 21:38:42.24 ] やっぱカッケーな
38 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/28(水) 23:36:34.31 ] >>32 これじゃだめ? #!/bin/sh cat hoge.dat | (while read -r line do alldata=$alldata$line done echo $alldata) 質問がほんとうにやりたいことなら、こんなのもあるかも。 #!/bin/sh cat hoge.dat | while read -r line do echo -n $line done echo
39 名前:>>30 mailto:sage [2012/11/29(木) 01:07:49.13 ] みなさん、ご丁寧にありがとうございました。 なぜ、期待どおりにならないか理解しました。 ちなみに、こういうやりかたもありますね。 ----------- for line in `cat hoge.dat` do alldata=$alldata$line done echo $alldata -----------
40 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/02(日) 21:10:12.06 ] 求めてるのと違うだろうけど、これでもできた sed -n 'H;${g;s/\n//gp}' hoge.dat
41 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/06(木) 22:17:50.48 ] bash の brace expansion {...} について教えてください. 環境は bash 4.2.39 MacOSX 10.7.5 です. 1$ a=foo 2$ echo $a{_a,_b,_c} 3$ echo $a{,_a,_b,_c} foo 4$ echo ${a}{,_a,_b,_c} foo foo_a foo_b foo_c この変数aの区切りを明示しない時(2$,3$)の挙動がよく分かりません. どう解釈すればいいのでしょうか?
42 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/06(木) 22:24:28.37 ] >>41 このように展開される $a{_a,_b,_c}→$a_a $a_b $a_c $a{,_a,_b,_c}→$a $a_a $a_b $a_c ${a}{,_a,_b,_c}→${a} ${a}_a ${a}_b ${a}_c
43 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/06(木) 22:32:45.24 ] >>42 ああ、よく分かりました。ありがとうございます。
44 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/06(木) 22:33:08.64 ] >>41 手元で動作を確認する限り 2$ は {} の展開を先にしてる つまり $a_a $a_b $a_c としてから変数の処理 => 何も出力されない 3$ も同様 $a $a_a $a_b $a_c としてから変数の処理 => $a だけ定義されてるから foo が出力 どこかマニュアルに展開の優先順位があるかもしれないがそれは確認してない
45 名前:44 mailto:sage [2012/12/06(木) 22:34:57.60 ] リロードしてなかった(´・ω・`) すまない...
46 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/07(金) 14:07:46.57 ] screen使いです。 bash_historyって何行ぐらいにしている? 直近のhistory | grep hoge | lessってするなら3桁の900行で十分だよね。 もうちょっと前のも検索したいなら4桁の9900行。 # 自分は余裕もってこれ。 9366$ メモリ食いそうだから、スクリプトを組んで今までの全部の履歴十数万行を検索するのも 超ひさしぶりのコマンド用途としてはありそう。その超ひさしぶりに使うコマンド用途なら # とコメントをつけておくとちょっと使いやすいかも。
47 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/07(金) 14:16:03.49 ] 好きにしろ。
48 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/07(金) 14:57:28.68 ] ヒストリーは何行にしてても 端末複数開いてたら消えちゃうし いつ打ったかの時間情報ないし あんまり意味がないよね
49 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/07(金) 15:29:36.16 ] >>48 > ヒストリーは何行にしてても > 端末複数開いてたら消えちゃうし 自分の力量の視野の狭さだとちゃんとexitって閉じると残るよ。 > いつ打ったかの時間情報ないし > あんまり意味がないよね 時間情報は環境変数の設定で秒数まで残るかな。秒数の小数点はスクリプトで工夫すれば 残せそうかな。そこまでの必要性がないからやっていないけど。
50 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/07(金) 15:43:25.01 ] シェルスクリプトでヒストリ残して何がうれしいの?
51 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/07(金) 17:11:43.25 ] シェルスクリプト内でhistory使う方法教えて。 #!/bin/sh コマンド1 コマンド2 history と書いて実行してもhistoryが何も表示されない><
52 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/07(金) 17:17:08.00 ] >>51 set -o history でどうかな。
53 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/07(金) 19:52:21.63 ] >>46 zsh使いなら死ぬまで履歴を残すもんだってばっちゃが言ってたから 50万行にしてる。 もちろん複数の端末起動してもちゃんとshare_historyされる設定。
54 名前:名無しさん@お腹いっぱい。 [2012/12/07(金) 23:24:10.48 ] プログラミング初心者です。 以下のコードがシェルの文法的におかしい点を教えて下さい。 ex1はargvでファイル名を読み込む外部のC++プログラムです。 不足してる情報もあると思いますが、分かる範囲で教えていただけたら助かります。 #!/bin/sh DIRx=$1 DIRy=$2 filesA=`ls $DIRx/*.data` filesB=`ls $DIRy/*.data` for x in $filesA; for y in $filesB; do ./ex1 $f $fi done
55 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/07(金) 23:31:28.06 ] なんでそんな間違い方するのか意味不明 釣りっぽい
56 名前:名無しさん@お腹いっぱい。 [2012/12/07(金) 23:39:25.77 ] すみません、釣りじゃないです。 ちょっと調べて、これでできたかもしれないです。 もし間違っていたら教えて頂けないでしょうか。 如何せんコンパイルはできるものの実行結果が合っているか確認する術が無いもので… for x in $filesA; do for y in $filesB; do ./ex1 $x $y done done
57 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/07(金) 23:51:12.55 ] 質問者ではないのですが この for/do/done の構文 言語仕様策定の上で、do の存在はどうしても必要だったの? 改行かセミコロンでループブロックの区切りは付きますよね もし無かったらアレができないよみたいな do の活用法なんてあるのでしょうか? 単に do/done なら覚え易いよね!程度だったら残念かも
58 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/08(土) 00:12:36.76 ] >>56 *.data で得るファイル名に空白がないのなら問題ない 空白があれば IFS=$'\n' が必要 文法はいい。というか文法以外のex1の意図がわからないけど
59 名前:名無しさん@お腹いっぱい。 [2012/12/08(土) 01:40:05.03 ] >>58 ありがとうございます、空白はありません。 お陰様でなんとかできました、ありがとうございました。 ex1はただの実行ファイルで、名前に特に意味はありません。
60 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/08(土) 08:14:05.32 ] >>54 ,>>56 釣りとは思わないけど、やりたいことはなんとなくわかるけどケアレスミスが多すぎて 判読不可能。 >>57 どの力が働いて、今の構文なのかはわからない。おまじないってことでいいんじゃないのw Unix創世期はほとんどがディスプレイなし、テレタイプ端末、スペック貧弱と想像できるから テキストエディタvi, emacsは使えずに開発環境はラインエディタ。 創世期シェルを作った開発形態・志向も違うだろうし、for-do-doneを言うならcase-esac, if-fiもどうなのってツッコミたくなるしなあ。その当時回文みたいなのが流行っていたの? 教育言語のPascalも律儀に{}だからね。 現在のemacsでksh, bashのfor文テンプレート使うとdo-doneってつくね。過剰に装飾している だけかもしれないけど。
61 名前:名無しさん@お腹いっぱい。 [2012/12/08(土) 09:21:06.89 ] >>60 ラクダ本(オライリーのPerlの本)の初版用語集によると、ある語の逆綴りを 採用するのはALGOL主義、だそうだが、elif(fileの逆綴りでもある)がない 理由として半ばジョークめいた書き方だったので話半分に。 # Pascalはbegin/endじゃ…
62 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/08(土) 14:39:25.53 ] >>60 born shellの作者がAlgolが好きだったから。
63 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/08(土) 16:02:40.46 ] 骨?
64 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/08(土) 17:03:07.57 ] >>62-63 英語の成績悪かったらしい奴が2人いるみたいだが、突っ込んだら負け。
65 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/08(土) 22:04:44.58 ] ?マークの意味が分からない奴がいるな・・・
66 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/08(土) 22:22:47.71 ] 任意の一文字マッチって意味でしょ。それぐらい知ってるよ。
67 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/09(日) 10:42:10.50 ] シェルスレなんだから変数が未設定かどうかの確認って答えるべきだな
68 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/09(日) 10:43:37.85 ] シェルglobだから>>66 で正しい。
69 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/09(日) 10:46:03.34 ] >>66 bo?rn?
70 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/09(日) 18:39:45.90 ] 誰もシェルグロブなんて言ってないけどな
71 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/10(月) 09:34:25.06 ] >>67 どういう意味? ?で変数の何が分かるの?
72 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/10(月) 10:11:21.88 ] >>71 ${hoge:?}
73 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/10(月) 13:52:17.02 ] ${foo:+hello} fooが nullかunset なら "", それ以外は "hello" ${foo+hello} fooが unsetなら "", それ以外は "hello" 前者は man bash にて仕様が ${parameter:+word} Use Alternate Value. If parameter is null or unset, nothing is substituted, otherwise the expansion of word is substituted. のように確認できたのですが、後者が見あたりません どの辺を見れば載っているでしょうか? 或いは man レベルでは載っていない仕様でしょうか?
74 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/10(月) 14:13:26.18 ] >>73 あ、それちょうど今週のレポートで学生に課したネタなんで、 知ってる人も答をここには書かないでね。(偶然は恐ろしい)
75 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/10(月) 14:36:02.61 ] うち学生じゃないんですが・・・ ならせめてレポート提出日が過ぎたら教えてください
76 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/10(月) 14:38:03.86 ] さっきのは null か unset の判別はどうやったらいいのか調べていたら見つけた小技です
77 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/10(月) 14:57:36.75 ] >>73 linuxjm.sourceforge.jp/html/GNU_bash/man1/bash.1.html#lbBB > コロンを省略した場合には設定されているかどうかのみを調べます。 これじゃね。
78 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/10(月) 17:47:50.38 ] >>77 ありがとうございます。それですね。 辿ってみたら man bash でも該当する箇所がありました。
79 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/10(月) 17:55:03.11 ] そりゃman bashの和訳だもの。
80 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/10(月) 18:53:49.37 ] わらかすなよ
81 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/13(木) 04:02:30.30 ] >>79 意味不明
82 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/13(木) 11:02:31.60 ] >>81 もともとbashのmanは英語で書かれていたんだよ
83 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/13(木) 23:00:47.57 ] わかる方がいたら教えてください。 引数で入力した値で、設定ファイル(~/test.conf)の置換文字列(%replace%)を置換することを考えています。 replace_str=%replace% input=$1 sed -e "s/${replace_str}/${input}/" ~/test.conf 上記のようなことを考えていますが、入力値に /(スラッシュ)があると、sedコマンドがエラーになってしまい、うまく置換ができません。 入力値に /(スラッシュ)がある場合でも正しく置換する方法はありますか? また、/(スラッシュ)以外でもNGになってしまう文字はありますか? その文字も正しく置換することは可能でしょうか。
84 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/13(木) 23:11:09.68 ] >>83 入力値に絶対入らない文字はある? あれば / のかわりにそれを使う。 sed -e "s,${replace_str},${input}," ~/test.conf みたいに。
85 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/13(木) 23:14:17.61 ] そんな文字を仮定できないなら、 $1中の / を \/ に置換してからinputに入れるしかないかな。 この置換がまたやっかいかもだが。
86 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/13(木) 23:29:11.48 ] replace_str=${replace_str//\//\\/} たぶんこれでいけるでしょう
87 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/14(金) 12:41:31.89 ] >>83 \や&も特殊な意味を持つと思うよ 俺なら、sedを使わざるをえないなら$inputに使える文字に制限を付けるかな
88 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/14(金) 12:52:19.32 ] sed 's/%replace%/_replace_/g' | m4 -D_replace_="$input"
89 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/12/14(金) 20:54:59.74 ] >>87 相手がWebの先の人間だったりするとそういう制限は難しいんじゃ
90 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/03(木) 00:00:22.31 ] シェルスクリプトでHex値を書き換える事は出来ますか? バイナリファイルAのHex値 00100000のようなものを01100000のように書き換えたいです。 駄目元で、 cat A | sed - e 's/00100000/01100000/' > A のようにやってみましたがダメでした。
91 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/03(木) 00:02:32.45 ] >>90 きみのsedは16進数値をかけるsedなのかい?
92 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/03(木) 00:23:12.33 ] >>91 やっぱり無理なんでしょうか。…
93 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/03(木) 01:02:55.97 ] bcかawkでも使っとけ
94 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/04(金) 01:11:51.48 ] シェルスクリプト バイナリファイル でぐぐると最初になかなか面白そうなのが出てきた 個人的にはperl使うのが楽だと思うけど
95 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/04(金) 10:22:05.55 ] >>94 これ? www.flat7th.org/~keizo/wiki/?page=%2B+%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%A7%E3%83%90%E3%82%A4%E3%83%8A%E3%83%AA%E6%93%8D%E4%BD%9C
96 名前:名無しさん@お腹いっぱい。 [2013/01/05(土) 23:39:03.74 ] FreeBSDの/bin/shのソースって単体配布されてないのん?
97 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/06(日) 00:05:05.98 ] これを見る限り、それさえ既に魔改造版でしかないみたいw ttp://www.in-ulm.de/~mascheck/various/ash/ash.png
98 名前:名無しさん@お腹いっぱい。 [2013/01/06(日) 00:25:20.45 ] shのソースV7のでおなかいっぱい
99 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/06(日) 04:34:44.00 ] >>96 基本的に全部まとめて配布なのが BSDの良い所の一つだよ。 でも単体取得する方法もある。
100 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/06(日) 09:24:06.28 ] その方法とは!?
101 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/06(日) 10:44:45.32 ] >>92 xxdで変換したの編集してからxxdで復元
102 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/07(月) 00:09:45.57 ] >>100 svnからゲッツ、じゃね svn.freebsd.org/base/head/bin/sh/
103 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/07(月) 13:31:44.54 ] >>91 うちのsedは書ける
104 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/07(月) 22:27:46.05 ] >>102 僕のケータイでも読めた。 でもインストールがわからない。 みんなどーやってインストールしてるの? 僕のケータイリナックスってやつらしいけど 客がシェル使えるよーになってないから これインストールしたら客もシェル使えるんだ。 でもインストールがわからない。
105 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/08(火) 11:07:30.16 ] >>104 configureしてmake install
106 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/08(火) 15:17:53.67 ] でもライブラリに分割されるとか魔改造されてて、あっさりとコンパイルできないのが常。 baseシステムに組み込まれてるのは取り出せないと思った方がいい。
107 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/08(火) 16:40:37.49 ] MINIX(86)のシェルを移植するのだ!
108 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/08(火) 18:03:08.60 ] フリーなの無いでしょ。
109 名前:名無しさん@お腹いっぱい。 [2013/01/12(土) 21:11:02.86 ] 2> /dev/null を 2>&- って書くとまずいことあるの? おしえて先生!
110 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/12(土) 22:41:52.39 ] >>106 ほとんど手が入っていないであろう net2 のソース持ってくるってのは?
111 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/13(日) 14:15:52.18 ] >>109 writeの失敗を検出するようなコードが書いてあると困る
112 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/13(日) 14:36:10.22 ] どこにですか?
113 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/13(日) 15:03:28.37 ] #include <unistd.h> int main(){ if(write(2,"hello",5) == -1){ return 1; } return 0; } こんな感じかな。
114 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/19(土) 01:07:47.55 ] >>109 &- ってどういう構文なの? htmlとか? >>111 エラーを返さない方が困ります
115 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/19(土) 02:20:17.72 ] 仕様変更した2chと、 それに対応してない専ブラ使うやつと、 &が何かも知らずにつっこむやつ
116 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/19(土) 02:32:56.96 ] と、ドヤ顔で解説する奴と ニヤニヤしながら傍観してるオレ。
117 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/19(土) 10:36:37.19 ] あー &ー なのか 失礼
118 名前:名無しさん@お腹いっぱい。 [2013/01/19(土) 18:28:47.20 ] 初心者だから使えるコマンドがlsとかなのは共通事項。 たまにネットがおかしいと聞くと言われて打った ifconfigは command not found になったりするんだよね。
119 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/19(土) 18:39:44.08 ] ifconfigは/usr/sbinにあったりするからな。
120 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/19(土) 18:50:09.03 ] 解決策を聞いてるんじゃないよ。(というか知ってるし) そうそうと共感してくれればいいのに。 面倒臭い人ね。
121 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/19(土) 21:26:02.44 ] そういう大事なコマンドは/sbinだろ。
122 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/20(日) 00:53:25.44 ] どこにシェルスクリプト要素があるんだ?
123 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/20(日) 02:42:53.88 ] >>120 誰でも知ってるような事を書いて 共感しろとは、勘違いも甚だしい
124 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/20(日) 03:42:08.87 ] さすがに生まれたての赤ん坊は知らねぇだろ
125 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/20(日) 05:26:07.60 ] 赤ん坊が無知を装うのは大昔からの通例だろ
126 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/20(日) 05:38:37.73 ] 会話できない以上知ってるかどうか確認する手段がないからな。
127 名前:名無しさん@お腹いっぱい。 [2013/01/20(日) 10:43:48.19 ] くだらない質問ですが、 次のシェルスクリプトで★マークに入る方法があれば教えてください。 ARG0="$0" while [ -h "$ARG0" ]; do ls=`ls -ld "$ARG0"` link=`expr "$ls" : '.*-> \(.*\)$'` if expr "$link" : '/.*' > /dev/null; then ★ ARG0="$link" else ARG0="`dirname $ARG0`/$link" fi done 処理時代はシンボリックリンクの実体を辿る処理だという事は調べて、 なんとか分かったんですが、★の処理にはいる条件がどうしても分かりません。 別に入らなくてもいいのですが、気になってしまって・・・
128 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/20(日) 10:50:31.37 ] 絶対パスへのリンク、じゃないの?
129 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/20(日) 10:54:20.46 ] >>127 解答を聞いてるんじゃないよ。 そうそう、こういう構文だと条件がわかりにくいよねぇー、 って共感してくれればいいんだけど。
130 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/20(日) 11:06:43.97 ] ってかreadlinkを自分で分かりにくく書いてみたってことでいいの?
131 名前:127 [2013/01/20(日) 11:12:54.89 ] >>128 ありがとうございます。 絶対パスで調べて、リンクを作りなおしたら通りました。
132 名前:127 [2013/01/20(日) 11:25:51.23 ] >>130 Linuxを使い始めたばかりで、 とりあえず適当なソフトをWebを見ながらインストールしていました。 その中でTomcatというソフトをインストールするのに、 シェルスクリプトの設置が必要と書かれており、そのサンプルが記載されていました。 しかし、サンプルの意味が全く分からなくて、そのまま使っていいのかも分からず 一から調べている最中でした。
133 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/20(日) 13:47:00.29 ] >>130 svn.apache.org/repos/asf/commons/proper/daemon/tags/COMMONS_DAEMON_1_0_7/src/samples/Tomcat7.sh の事だな。特定の環境にしか存在しないreadlinkは使いたくなかったんだろ。 素人は黙ってなよ。
134 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/20(日) 14:49:14.74 ] リテラシ高いな 感心感心
135 名前:名無しさん@お腹いっぱい mailto:sage [2013/01/23(水) 14:41:17.73 ] もし、Aのディレクト内が空だったら、○○しなさい の一番簡単なスクリプトは?
136 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/23(水) 14:56:34.29 ] find A -empty | fgrep -x A >/dev/null && ○○
137 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/23(水) 15:51:12.07 ] 解答を聞いてるんじゃないよ。 そうそう、ディレクトリが空かどうかの判断って簡単にできないよねぇー って共感してくれればいいんだけど。
138 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/23(水) 16:51:23.23 ] 簡単にできるけど、回答知りたくないらしいから黙っておこう。
139 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/23(水) 17:03:26.94 ] コピペやん
140 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/23(水) 19:43:01.34 ] >>137 さぁ、お前のハードリンクを数えろ
141 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/23(水) 20:37:43.99 ] それだと内部のディレクトリ数しかわかんねえよ
142 名前:名無しさん@お腹いっぱい。 [2013/01/23(水) 21:01:24.46 ] 141が何を主張しているのかエスパーお願い
143 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/23(水) 21:27:00.12 ] エスパーしよう。 >>141 は、ディレクトリのハードリンク数が2かどうかで空ディレクトリを判断しても、 それは「サブディレクトリ数+2」の値でしかないから、 内部のディレクトリ数が0で通常ファイルだけ存在する場合まで 空ディレクトリと誤判定してしまう、と主張しているようだ。 要するに、空ディレクトリ≠葉(leaf)ディレクトリ
144 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/23(水) 21:31:31.38 ] .と..が必ず存在するから、空ディレクトは存在しない。 ゆえに判定式は定数式。
145 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/23(水) 21:56:03.02 ] エスパーってほどじゃないだろ
146 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/23(水) 23:08:40.40 ] >>137 消してみればいいんだしね。
147 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/23(水) 23:09:52.41 ] 権限がなかったり
148 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/24(木) 01:17:26.13 ] >>137 共感できない。
149 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/24(木) 05:53:53.02 ] 教官!できない…
150 名前:名無しさん@お腹いっぱい。 [2013/01/24(木) 08:38:20.39 ] ようするに >>141 は . と .. がリンク数に含まれることを知らないってことかな
151 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/24(木) 08:43:24.58 ] >>150 すでに>>143 が解説済み。
152 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/24(木) 09:15:47.01 ] 空ディレクトリが存在しないのであれば rmdirはどのディレクトリも削除できないのでは?
153 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/24(木) 09:35:00.86 ] こまけぇことは気にしないで消せばいいんだよ
154 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/24(木) 11:20:22.52 ] >>152 空ディレクトリは.と..以外のファイル/ディレクトリが無いディレクトリのこと
155 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/24(木) 18:41:29.19 ] /a.appを起動 プロセスを終了 を5秒ごとに繰り返すコマンド書いてくださいな
156 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/24(木) 18:47:02.12 ] なんでそんな傲慢なの?
157 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/24(木) 18:51:36.35 ] そうそう、アプリを起動してプロセスを終了を、 5秒ごとに繰り返したりしたいこと多いよね、共感します。
158 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/24(木) 21:04:28.31 ] >>155 プロセスを終了 って、どのプロセスでもいい?
159 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/24(木) 21:33:59.04 ] >>155 while sleep 5;do pkill a.app;/a.app &;done ほんとはpid拾うべきか。$?だっけ。
160 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/25(金) 01:43:15.60 ] $! な
161 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/25(金) 11:02:15.89 ] .appって拡張子はMac OS Xのbundleか? だとするとopen -a /a.appだろうけど、まあapplescriptで書いた方がいいよ。 ジェントルに終了させられるし。
162 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/25(金) 11:31:59.01 ] applescriptって#がコメントにならないから #!/usr/bin/osascriptって書けないんだよね…。
163 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/25(金) 11:46:54.65 ] ファイルの一行目だけ特殊扱いしてくれればいいんだけどな。 そういうLisp系のインタープリタある。(そもそもLisp系は行頭の#がちと特殊だが)
164 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/25(金) 13:38:52.29 ] >>162 2行目以降を使うスクリプトを書いてそれをシェバングにしたら?
165 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/25(金) 14:09:28.74 ] >>164 残念。 シェバングに指定できるのはバイナリだけ。(スクリプトじゃ駄目)
166 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/25(金) 16:53:20.52 ] >>165 じゃあperlかなんかで1行に凝縮させればおk
167 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/25(金) 16:57:50.64 ] あれ?バイナリじゃなくても動くぞ? うちの壊れたか?
168 名前:名無しさん@お腹いっぱい。 mailto:saeg [2013/01/25(金) 17:47:21.06 ] shellが実行する場合もある。
169 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/25(金) 17:48:02.97 ] いずれにせよexecve(2)の中でやることだし、 最近は自分で処理するシェルもいるし。
170 名前:名無しさん@お腹いっぱい。 [2013/01/25(金) 21:06:05.27 ] osascript は Leopard 以降なら sh-bang を理解するお。
171 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/25(金) 22:24:03.73 ] うろ覚えだけどbashの挙動は とりあえずexec*してみる -> 駄目だったら/bin/bashで実行してみる の2段構えだったような。
172 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/26(土) 13:02:07.76 ] FreeBSDだと #!インタプリタ にバイナリしか指定できないが、 Linuxだとインタプリタがスクリプトでも動くようだ。
173 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/26(土) 13:06:41.79 ] BSDはダメだな ずいぶんと中途半端な意識だな
174 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/26(土) 17:08:04.37 ] >>172 だから、それはLinuxの機能じゃなくてbashの機能でしょ。
175 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/26(土) 17:11:06.38 ] _人人人人人人人_ > bashの機能 <  ̄Y^Y^Y^Y^Y^Y ̄
176 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/26(土) 17:39:24.66 ] >>174 bashの機能じゃなくてカーネル(システムコール)のexecve(2)の機能なんだけど。
177 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/26(土) 19:52:37.75 ] git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=blob;f=fs/binfmt_script.c
178 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/26(土) 23:23:34.63 ] BSD系って結構厳密みたいだね。 #!/usr/bin/env PATH=/bin:/usr/bin:/usr/local/bin sh のどこか適当なshを使ってという方法もできないような。
179 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/26(土) 23:31:57.82 ] それって厳密か?
180 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/27(日) 03:11:09.66 ] 何を厳密といってるのか知らないけど、#!行ではオプションは一つしか指定できない。 ↓これはダメ #!/usr/bin/env PATH=/bin:/usr/bin:/usr/local/bin sh
181 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/27(日) 08:31:23.75 ] >>180 だから、それはFreeBSDの仕様じゃなくてashの仕様でしょ。
182 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/27(日) 08:38:44.48 ] _人人人人人人人_ > ashの仕様 <  ̄Y^Y^Y^Y^Y^Y ̄
183 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/27(日) 09:16:38.06 ] >>176 linux.die.net/man/2/execve The interpreter must be a valid pathname for an executable which is not itself a script. って書いてあるけど。 >>177 www.tamacom.com/tour/kernel/linux/S/11237.html#L19 だと 26 if ((bprm->buf[0] != '#') || (bprm->buf[1] != '!') || (bprm->sh_bang)) 27 return -ENOEXEC; となってるので、仕様変えたのかな。 これ、 # cat /bin/aho #!/bin/baka $ cat /bin/baka #!/bin/aho とループしてたらどうなる?
184 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/27(日) 09:31:47.72 ] >>183 仕様変えた。Linuxでも古いカーネルだと#!/スクリプトは不可。 #!スクリプトがループしてた場合は単にexecve(2)がエラーになるだけ。 一応ループ判定はしてるみたい。
185 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/27(日) 09:43:22.30 ] >>183 スクリプトのネスティングが4回程度でエラーになるようになってるから、 ループしてたらそれでエラーになる。無限ループでハマることはない。
186 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/27(日) 10:16:14.90 ] なるほど、 >>177 25 if ((bprm->buf[0] != '#') || (bprm->buf[1] != '!') || 26 (bprm->recursion_depth > BINPRM_MAX_RECURSION)) BINPRM_MAX_RECURSIONまでは再帰するのか。 >>183 の例では/bin/aho, /bin/bakaの実行を何回も試みてBINPRM_MAX_RECURSIONに 達してやっとエラーか。 ダサッ
187 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/27(日) 10:42:07.89 ] シンボリックリンクのループ検出と一緒だろ。OSによらず。 2つだけでループしててもMAXに達するまでずっとたどってようやくエラー。
188 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/27(日) 12:47:54.49 ] そういえばそうだな。でも自己参照くらいはその場でチェックしてもいいだろ。 $ cat /bin/aho #!/bin/aho
189 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/27(日) 12:52:21.55 ] その場でチェック()
190 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/27(日) 13:55:52.24 ] Patches Welcome
191 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/27(日) 14:29:29.40 ] そもそも自己参照していない正常なスクリプトの方が圧倒的に多いんだから、 自己参照をチェックするとそのオーバーヘッドが、全ての正常なスクリプトにも 負担させられることになって、実行速度がかえって遅くなるかと。
192 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/27(日) 16:42:35.29 ] ファイルからの読み込み行ってるんだから、スクリプトファイル名の比較の 負荷なんてゴミでしょ。
193 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/27(日) 17:04:30.10 ] >>192 のプログラマのセンスのなさはわかった。
194 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/27(日) 17:42:33.16 ] >>193 具体的に解説ヨロシク
195 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/27(日) 17:53:16.99 ] まずコードを書け、話はそれからだ
196 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/27(日) 18:21:24.09 ] >>195 だよな >>193 には具体的なコードを示す義務がある
197 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/27(日) 18:25:49.84 ] >>196 何を言ってるんだ?コードの話をしているお前ら全員だよ
198 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/27(日) 19:34:09.72 ] >>187 > シンボリックリンクのループ検出と一緒だろ。OSによらず。 シンボリックリンクのループ検出なんてある? どういった場合に検出する?
199 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/27(日) 19:56:14.74 ] >>198 $ ln -s hoge /tmp/hoge $ cat /tmp/hoge cat: /tmp/hoge: Too many levels of symbolic links
200 名前:名無しさん@お腹いっぱい。 [2013/02/12(火) 18:33:08.66 ] ttp://d.hatena.ne.jp/m-hiyama/20071221/1198221671 some-command 3>&1 >/dev/null 2>&3 3>&- | less 1番の値が最終的にどこいったのがかわからんのです・・・ 1→3→2とコピーされて標準エラー出力になるんじゃないの?
201 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/02/12(火) 18:46:22.72 ] >>200 1は/dev/nullだよ。
202 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/02/12(火) 18:53:12.63 ] >>200 1は3経由で最終的に2にコピーされて、その状態でsome-command が実行されてる、 で合ってるよ。 その「2にコピーされたもの」はパイプの入力だから、 結果的にsome-commandの標準エラー出力がパイプにつながる。 some-commandの標準出力は >>201 のとおり /dev/nullに捨てられてる。
203 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/02/12(火) 19:05:35.88 ] リダイレクトは左から順番に解釈していけば良いよ。 (1) 3は1(標準出力)に向けられる。 (2) 1は/dev/nullに向けられる。 (3) 2は3(標準出力)に向けられる。 (4) 3は閉じられる。 結果として 1は/dev/nullに2は標準出力に向いてる。
204 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/02/12(火) 20:55:57.35 ] 再度質問です shの機能で >>200 みたいに だーってリダイレクトが出来るじゃないですか その文法から「1」が最終的にどこ行ったのか わーって追跡したいんです 出来ますの?勿論ググりましたが、当方馬鹿なのでわかりません サルでも分かるような回答を強く期待します 僕はこういう小バカにしたような書き方しか出来ませんが、凄く切実に知りたいです さぁどうぞ↓
205 名前:200 [2013/02/12(火) 21:09:43.68 ] うごごごご
206 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/02/12(火) 21:24:31.15 ] >>204 > aその文法から「1」が最終的にどこ行ったのか わーって追跡したいんです ktrace とか truss とか strace ってのはダメ?
207 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/02/14(木) 11:04:26.66 ] シェル変数にコマンドを文字列として設定しておいて、それを実行したい。 CMD="printf '%x %x\n'" #これはダメ $CMD 13 32 を実行して printf '%x %x\n' 13 32 と同じ出力を得たい。 $CMD 13 32の行は変更不可。 CMD="printf '%x %x\n'"ではダメでした。 CMDにどのような文字列を与えると実現できるでしょうか? bashの拡張機能を使ってもよいですが、なるべく使わない方向で。
208 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/02/14(木) 11:09:32.45 ] お題が不正確でした > $CMD 13 32の行は変更不可。 $CMD 13 32 を含むシェルスクリプトがある。環境変数としてCMDを与えて printf '%x %x\n' 13 32 と同じ出力を得たい。 CMDに #!/bin/sh printf '%x %x\n' "$@" というスクリプトのパスを与える方法は思いつきましたが、スクリプトファイルを作成しないで実現したい。
209 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/02/14(木) 11:44:48.59 ] >>208 CMD='printf %x\040%x\n' バックスラッシュが化けるので全角にしたので半角に直してね
210 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/02/14(木) 13:05:11.46 ] evalって知ってる?便利だよ
211 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/02/14(木) 13:12:07.63 ] >>210 > $CMD 13 32の行は変更不可。 evalも使用不可
212 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/02/14(木) 14:38:40.47 ] >>211 CMDの中にeval入れれば行けるだろ CMD="eval print ..以下略
213 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/02/16(土) 14:38:00.54 ] >>212 それでOKでした。
214 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/02/16(土) 21:58:07.02 ] >>211 >>211 >>211
215 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/02/17(日) 00:35:16.20 ] ももクロはズリネタ探しをしている人には理解出来ないよ
216 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/02/17(日) 00:51:10.81 ] awkのprintで 1, print $2 2, print \$2 3. print\ \$2 1、2は2列目て事だと思うけど3てどうなるの?
217 名前:215 mailto:sage [2013/02/17(日) 01:31:05.17 ] あれ・・盛大に誤爆ってたwごめん
218 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/02/17(日) 02:55:22.76 ] >>214 呼び出すところが変わってないから良いんじゃないの?
219 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/02/20(水) 21:18:41.67 ] 2chの画像スレ開いて、Ctrl+aでコピーしたのをdl.txtにコピーしておいて そのカレントフォルダでこれ実行すると、びっくりするほどユートピア grep -E "(^http|^ttp)" dl.txt |sed -e "s/http/ttp/g; s/ttp/http/g"| wget -A jpg,png,gif -N -i -
220 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/02/20(水) 21:43:00.53 ] 昔そういう事やってたけど グロ画像が紛れ込んじゃうからやめたよ 安心してシコシコできない
221 名前:219 mailto:sage [2013/02/20(水) 21:54:17.39 ] >>220 それなんだよ...URLのブラックリストとか出来ないかな?まぁ出来ても遅くなりそうだけど
222 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/02/20(水) 22:04:29.90 ] ブラックリスト作っておいてgrep -vで除外するくらいかな? いちいちグロ画像調べてNG登録するのが嫌でね…
223 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/02/20(水) 22:48:10.03 ] grepしてからsedですか、そうですか
224 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/02/21(木) 00:53:50.25 ] >>221 専ブラ使えよ。 グロってレスがついてたら、モザイクかけてくれたり。
225 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/02/21(木) 01:03:43.88 ] >>219 スレとってくんのもwgetでいいだろ。なぜに手動。
226 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/02/21(木) 10:19:46.09 ] >>224 >グロってレスがついてたら、モザイク それ便利そうだな! どこの専ブラ? うちはかちゅ〜しゃ使ってるけど
227 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/02/21(木) 13:17:14.46 ] >>220 いやいや、落としたら、シコシコする前に、まず賢者モードで分類とか整理しろよ。
228 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/02/21(木) 15:56:58.86 ] >>227 モード切替どうやってするつもりだよ
229 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/02/21(木) 21:47:15.77 ] >>226 2chmate
230 名前:名無しさん@お腹いっぱい。 [2013/02/22(金) 12:12:03.87 ] シェルスクリプト内でtarアーカイブ化するとき、アーカイブ名に変数を指定したいのですが、 エラーが出てtarが生成されません。なにが間違っているか教えてください。 strArch="~/Desktop/a.tar" /usr/bin/tar cf ${strArch} 1.jpg 2.jpg 3.jpg と書くと /usr/bin/tar: ~/Desktop/a.tar: open 不能: No such file or directory /usr/bin/tar: Error is not recoverable: exiting now というエラーが出ます。 一方、 /usr/bin/tar cf ~/Desktop/a.tar 1.jpg 2.jpg 3.jpg と書くと正常にa.tarが生成されます。
231 名前:230 mailto:sage [2013/02/22(金) 12:13:52.84 ] 環境はcygwinで、シェルはbashです。
232 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/02/22(金) 12:40:05.30 ] >>230 変数の中のチルダは展開されない。 $HOME/Desktop/a.tar を使え。
233 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/02/22(金) 13:01:39.80 ] >>232 できました! ありがとうございました。