シェルスクリプト総合 その21at UNIX
シェルスクリプト総合 その21 - 暇つぶし2ch200:名無しさん@お腹いっぱい。
13/02/12 18:33:08.66
URLリンク(d.hatena.ne.jp)
some-command 3>&1 >/dev/null 2>&3 3>&- | less

1番の値が最終的にどこいったのがかわからんのです・・・
1→3→2とコピーされて標準エラー出力になるんじゃないの?

201:名無しさん@お腹いっぱい。
13/02/12 18:46:22.72
>>200
1は/dev/nullだよ。

202:名無しさん@お腹いっぱい。
13/02/12 18:53:12.63
>>200
1は3経由で最終的に2にコピーされて、その状態でsome-command が実行されてる、
で合ってるよ。

その「2にコピーされたもの」はパイプの入力だから、
結果的にsome-commandの標準エラー出力がパイプにつながる。

some-commandの標準出力は >>201 のとおり /dev/nullに捨てられてる。

203:名無しさん@お腹いっぱい。
13/02/12 19:05:35.88
リダイレクトは左から順番に解釈していけば良いよ。
(1) 3は1(標準出力)に向けられる。
(2) 1は/dev/nullに向けられる。
(3) 2は3(標準出力)に向けられる。
(4) 3は閉じられる。
結果として
1は/dev/nullに2は標準出力に向いてる。

204:名無しさん@お腹いっぱい。
13/02/12 20:55:57.35
再度質問です
shの機能で >>200 みたいに だーってリダイレクトが出来るじゃないですか
その文法から「1」が最終的にどこ行ったのか わーって追跡したいんです
出来ますの?勿論ググりましたが、当方馬鹿なのでわかりません
サルでも分かるような回答を強く期待します
僕はこういう小バカにしたような書き方しか出来ませんが、凄く切実に知りたいです
さぁどうぞ↓

205:200
13/02/12 21:09:43.68
うごごごご

206:名無しさん@お腹いっぱい。
13/02/12 21:24:31.15
>>204
> aその文法から「1」が最終的にどこ行ったのか わーって追跡したいんです
ktrace とか truss とか strace ってのはダメ?

207:名無しさん@お腹いっぱい。
13/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:名無しさん@お腹いっぱい。
13/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:名無しさん@お腹いっぱい。
13/02/14 11:44:48.59
>>208
CMD='printf %x\040%x\n'

バックスラッシュが化けるので全角にしたので半角に直してね

210:名無しさん@お腹いっぱい。
13/02/14 13:05:11.46
evalって知ってる?便利だよ

211:名無しさん@お腹いっぱい。
13/02/14 13:12:07.63
>>210
> $CMD 13 32の行は変更不可。

evalも使用不可

212:名無しさん@お腹いっぱい。
13/02/14 14:38:40.47
>>211
CMDの中にeval入れれば行けるだろ

CMD="eval print ..以下略

213:名無しさん@お腹いっぱい。
13/02/16 14:38:00.54
>>212
それでOKでした。

214:名無しさん@お腹いっぱい。
13/02/16 21:58:07.02
>>211
>>211
>>211

215:名無しさん@お腹いっぱい。
13/02/17 00:35:16.20
ももクロはズリネタ探しをしている人には理解出来ないよ

216:名無しさん@お腹いっぱい。
13/02/17 00:51:10.81
awkのprintで
1, print $2
2, print \$2
3. print\ \$2
1、2は2列目て事だと思うけど3てどうなるの?

217:215
13/02/17 01:31:05.17
あれ・・盛大に誤爆ってたwごめん

218:名無しさん@お腹いっぱい。
13/02/17 02:55:22.76
>>214
呼び出すところが変わってないから良いんじゃないの?

219:名無しさん@お腹いっぱい。
13/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:名無しさん@お腹いっぱい。
13/02/20 21:43:00.53
昔そういう事やってたけど
グロ画像が紛れ込んじゃうからやめたよ
安心してシコシコできない

221:219
13/02/20 21:54:17.39
>>220
それなんだよ...URLのブラックリストとか出来ないかな?まぁ出来ても遅くなりそうだけど

222:名無しさん@お腹いっぱい。
13/02/20 22:04:29.90
ブラックリスト作っておいてgrep -vで除外するくらいかな?
いちいちグロ画像調べてNG登録するのが嫌でね…

223:名無しさん@お腹いっぱい。
13/02/20 22:48:10.03
grepしてからsedですか、そうですか

224:名無しさん@お腹いっぱい。
13/02/21 00:53:50.25
>>221
専ブラ使えよ。
グロってレスがついてたら、モザイクかけてくれたり。

225:名無しさん@お腹いっぱい。
13/02/21 01:03:43.88
>>219
スレとってくんのもwgetでいいだろ。なぜに手動。

226:名無しさん@お腹いっぱい。
13/02/21 10:19:46.09
>>224
>グロってレスがついてたら、モザイク
それ便利そうだな! どこの専ブラ?
うちはかちゅ~しゃ使ってるけど

227:名無しさん@お腹いっぱい。
13/02/21 13:17:14.46
>>220
いやいや、落としたら、シコシコする前に、まず賢者モードで分類とか整理しろよ。

228:名無しさん@お腹いっぱい。
13/02/21 15:56:58.86
>>227
モード切替どうやってするつもりだよ

229:名無しさん@お腹いっぱい。
13/02/21 21:47:15.77
>>226
2chmate

230:名無しさん@お腹いっぱい。
13/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
13/02/22 12:13:52.84
環境はcygwinで、シェルはbashです。

232:名無しさん@お腹いっぱい。
13/02/22 12:40:05.30
>>230
変数の中のチルダは展開されない。
$HOME/Desktop/a.tar
を使え。

233:名無しさん@お腹いっぱい。
13/02/22 13:01:39.80
>>232
できました!
ありがとうございました。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch