[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/09 21:40 / Filesize : 275 KB / Number-of Response : 969
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

シェルスクリプト総合@LINUX Part3



1 名前:login:Penguin [2007/07/10(火) 23:17:13 ID:qGthZdME]
UNIX板のスレを見ている方も多数おられるかと思いますが、
まあそれはそれとして、BASHウゼーとか言われる心配なく
平和にLINUX的スクリプト談義しましょうよ。

初めての自作スクリプト、自信ないから見てください。な初心者から
トリッキーな技を駆使した作品を披露したい、蘊蓄を語りたい上級者まで
いろいろな人に参加して頂けると嬉しいです。

perlやらPythonやらの話が混ざっても良いんでない?

【sed】シェルスクリプト総合@LINUX Part2【awk】
pc11.2ch.net/test/read.cgi/linux/1154578200/
pc8.2ch.net/test/read.cgi/linux/1121994321/

>>2-5あたりに色々と。


338 名前:login:Penguin mailto:sage [2007/11/23(金) 23:25:42 ID:KoVu18yL]
some | command | perl -ne 'print unless $seen{$_}++'


339 名前:login:Penguin mailto:sage [2007/11/24(土) 02:54:03 ID:Qc2k01yB]
>>335
func をスペースを分割しないで処理するようにして、
func に渡す前に "$LIST" だけ分割しちゃえば良いんじゃないの?


340 名前:login:Penguin mailto:sage [2007/11/24(土) 13:44:38 ID:3ItHeK84]
>>338
おおおお、できました。ありがとうございました。

341 名前:login:Penguin mailto:sage [2007/11/24(土) 15:57:48 ID:uBYpiRKV]
From - Fri Nov 20 14:53:45 2007
From: "Jfda dsadsada" <fdsfdsa@thdsadaer.de>
From - Fri Nov 21 14:53:45 2007
From: "rwerw dfsa" <sfdaf@fdfds.com>
From - Fri Nov 23 14:53:45 2007
From: "a bcd" <d@dfds.com>
From - Fri Nov 23 14:53:46 2007
From: "abc" <abc@abc.net>

このようなテキストの中から、日付に対応したアドレスだけをテキストに出力するにはどうしたらいいのでしょうか?
11月20日が指定されたらfdsfdsa@thdsadaer.deを出力
11月23日が指定されたらd@dfds.comとabc@abc.netを出力といった具合です

342 名前:login:Penguin mailto:sage [2007/11/24(土) 16:23:59 ID:bvlPAES0]
grep -A1 "Nov 20" | grep -o "<.*@.*>"

343 名前:login:Penguin mailto:sage [2007/11/24(土) 17:59:39 ID:z00X8bIQ]
>>339それが出来れば良いんですが、
できないのです。方法ありますか?

func内で echo $3; した場合。

func "eee eee" "fff fff" "$LIST" "ggg ggg";
echo $3 → "aaa aaa" "bbb" "ccc ccc ccc" "ddd"
当然のように、LIST全体が一つの引数に、、、

以下のようにクォートをなくすと
func "eee eee" "fff fff" $LIST "ggg ggg";
echo $3 → "aaa
LIST内のスペースで、分解されてしまいます。

$3 に "aaa aaa" を渡したいのに、、、

344 名前:login:Penguin mailto:sage [2007/11/24(土) 22:04:52 ID:DnopHw8N]
無理にシェルで書くより
perl かなんか使った方がいいんじゃね。
適材適所。

345 名前:login:Penguin mailto:sage [2007/11/24(土) 22:28:40 ID:bmHXinLt]
eval set $LIST
func "eee eee" "fff fff" "$@" "ggg ggg"


346 名前:login:Penguin mailto:sage [2007/11/25(日) 17:46:10 ID:ex492j4k]
>>345
これだ!
こんなトリッキーな手法もあるんですね。
奥が深い。ありがとうございました。



347 名前:login:Penguin mailto:sage [2007/11/25(日) 22:12:54 ID:nNUo7Vyu]
>>342
ありがとうございました

348 名前:login:Penguin [2007/11/28(水) 16:44:21 ID:lxwXbk7L]
特定のディレクトリ以下にあるディレクトリ名を検索し
そのディレクトリの中にファイルがあった場合のみ変数にディレクトリ名を追加する。
という処理をしたいと考えています。

LIST=`find 特定のディレクトリ -maxdepth 1 -mindepth 1 -type d`
上記のコマンドでディレクトリ一覧は取得できたのですが
取得したディレクトリ一覧の中にファイルがあるかどうかの条件設定方法がわかりません
ご教授ください

349 名前:login:Penguin mailto:sage [2007/11/28(水) 16:51:01 ID:hjQ8uHjr]
>>348
GNU の find なら ! -empty で。

350 名前:348 mailto:sage [2007/11/28(水) 17:14:26 ID:lxwXbk7L]
>>349
レスありがとうございます。
LIST=`find 特定のディレクトリ -maxdepth 1 -mindepth 1 -type d ! -empty`
上記のコマンドで無事に条件を満たすことが出来ました。

感謝です><

351 名前:login:Penguin mailto:sage [2007/11/30(金) 01:52:45 ID:vbHro4B7]
1 A
1 B
1 C
2 P
2 Q
3 X
3 Y
3 Z
...
のような入力を
1 A B C
2 P Q
3 X Y Z
...
のように整形する簡単な方法はありますか?

352 名前:login:Penguin mailto:sage [2007/11/30(金) 02:21:47 ID:8mp/o88K]
awk '{h[$1] = h[$1] " " $2} END { for (key in h) print key h[key] }' < input | sort




353 名前:login:Penguin mailto:sage [2007/11/30(金) 13:45:29 ID:zEAz9Kgp]
>>352
惚れた

354 名前:login:Penguin mailto:sage [2007/12/01(土) 01:13:52 ID:285rAG3t]
inputをリダイレクトしているのがイヤ。

355 名前:login:Penguin mailto:sage [2007/12/01(土) 01:27:18 ID:aR34EpD+]
awkはファイル名を引数に取れるんだな。
パイプでしか使った記憶がなく、素で知らなかった。




356 名前:login:Penguin mailto:sage [2007/12/01(土) 11:59:35 ID:lphCOL1Q]
むしろパイプでしか使えないコマンドの名前を
パッと挙げろという方がむつかしいだろ



357 名前:login:Penguin mailto:sage [2007/12/01(土) 12:16:31 ID:z08ppphA]
オプションの引数という形もない、というものはだいぶ少ないね

358 名前:login:Penguin mailto:sage [2007/12/01(土) 19:59:33 ID:aR34EpD+]
とっさに出てきたのは tr


359 名前:login:Penguin mailto:sage [2007/12/01(土) 21:03:16 ID:z08ppphA]
MS-DOS 標準添付の SORT (.EXE か .COM か自身がない)

360 名前:login:Penguin mailto:sage [2007/12/01(土) 23:25:16 ID:+jVAJI5Z]
MS-DOS 標準添付の MORE

361 名前:login:Penguin [2007/12/03(月) 14:25:58 ID:pB5IpK3Q]
複数のコマンドを実行してログを残したいのですが

( { command1 && command2 } > normal.log ) >& error.log

で、標準出力と標準エラーをファイルにリダイレクトまではうまくいきました。
このエラー出力を、画面にも出すにはどんなふうに書くのでしょう?

ttp://x68000.q-e-d.net/~68user/unix/pickup?%A5%EA%A5%C0%A5%A4%A5%EC%A5%AF%A5%C8
ちなみに、ここまではこの辺を参考にさせていただきました。

お願いいたします。

362 名前:login:Penguin mailto:sage [2007/12/03(月) 14:26:53 ID:pnpsuBAG]
>>361
tee

363 名前:login:Penguin [2007/12/03(月) 15:02:26 ID:pB5IpK3Q]
>>362
ありがとうございます
できました。

最初に言ってたのとちょっと違うのですが、ようは、すべてログに保存して
なおかつERRORの文字が入ってる行だけを画面に出力したかったので

2>&1 | tee file.log | grep ERROR

でやりたいことができました。
いろいろ勉強になりました。サンクス。

364 名前:login:Penguin mailto:sage [2007/12/03(月) 16:10:39 ID:+7LXyEUm]
コマンドラインとGUIを融合するHotwire
opentechpress.jp/developer/article.pl?sid=07/12/03/0133253

365 名前:login:Penguin mailto:sage [2007/12/03(月) 16:33:46 ID:CJjSSdo9]
>>364
面白そうだけど、記事の中に具体的な画像が欲しいね・・・・

366 名前:login:Penguin mailto:sage [2007/12/03(月) 16:43:39 ID:pm3xTTNy]
>>365
code.google.com/p/hotwire-shell/wiki/Screenshots



367 名前:login:Penguin mailto:sage [2007/12/03(月) 17:31:20 ID:BNt6sl0D]
>>366
画像が表示されないのは、送ってくるContent-Typeがおかしいのか。
なんでapplication/octet-streamやねん。

368 名前:login:Penguin [2007/12/04(火) 22:59:48 ID:Bpu7L1AF]
ややスレ違いだが、くだ質よりこっちかなと

シェルスクリプトの本を買う際に、Linuxユーザーでbashメインで使ってるなら
主旨がbash向けのものを買うべきですか?
それともB shell全般向けやsh向けでbashは補完程度の本でも質の高いものを買うべきでしょうか
両シェルの間にそれほど機能、性格の差はなさそうだし

369 名前:login:Penguin mailto:sage [2007/12/04(火) 23:06:21 ID:0gQg9Z1k]
bashismって言葉があるくらいで、ついついbashの機能を使ってしまうことは多い。
素のBourne Shellの機能がどこまでなのか書いてある本がいいと思う。


370 名前:login:Penguin mailto:sage [2007/12/04(火) 23:28:47 ID:Bpu7L1AF]
>>369
サンクス
sh向けでも最近の多くの書籍はbashもカバーしているようですので、その辺りを探してみます

371 名前:login:Penguin mailto:sage [2007/12/05(水) 11:12:29 ID:tDVDuECI]
ttp://www.amazon.co.jp/dp/4774122610
そのへん意識するならこれいいかも。
SunOS の bsh と FreeBSD の bsh ( ash ) で違いがある場合についてまで
明記されてる。

372 名前:login:Penguin mailto:sage [2007/12/05(水) 21:59:53 ID:KlliiKVC]
>>371
その本と、「UNIXシェルスクリプトコマンドブック 山下 哲典」を最後に候補にしてましたが、後者を買いました。
sh、bash共用でサンプルが多いので。

373 名前:login:Penguin [2007/12/06(木) 18:06:51 ID:ltYfbiEn]
いつも複合条件式でまるんですけど
#!/bin/bash
WAITSEC=""
if [ -z "$WAITSEC" -o $WAITSEC -lt 60 ]; then
    WAITSEC=10
fi
を実行すると
./hoge.sh: line 3: [: too many arguments
というエラーになります。-oとか-aで記述するifは今まで何回かやったのに
一度もできた記憶が無い!!。結局ifを分けたりして対処してきた負け人生です。

いったい何が悪いというのでしょうか??
教えていただけますか?

374 名前:login:Penguin mailto:sage [2007/12/06(木) 18:31:24 ID:bgO18Eza]
確かにbashだとなるねぇ。zshだとならんから気づかなかったw

#!/bin/bash
WAITSEC=$1
if [ -z "$WAITSEC" ] || [ $WAITSEC -lt 60 ]; then
WAITSEC=10
fi

echo $WAITSEC

とりあえずこれで。

375 名前:login:Penguin mailto:sage [2007/12/06(木) 18:35:40 ID:bgO18Eza]
と、思ったら出来たw
if [ -z "$WAITSEC" -o \( $WAITSEC -lt 60 \) ]; then

こういうことだな。
優先順位がおかしいんだ。

376 名前:login:Penguin mailto:sage [2007/12/07(金) 00:20:04 ID:2WlU8Mqa]
>>373
-z "$WAITSEC" の成否にかかわらず $WAITSEC -lt 60が実行されちゃってるから問題なんじゃないか?
おそらく -z "$WAITSEC"のときは 後ろの条件は 「-lt 60」になるだろうから、>>374のようにするか${WAITSEC:-0}とかやったらいいんじゃね?



377 名前:login:Penguin mailto:sage [2007/12/07(金) 10:01:03 ID:uKkYmJTB]
>WAITSEC=""
なので、
>if [ -z "$WAITSEC" -o $WAITSEC -lt 60 ]; then

if [ -z "" -o -lt 60 ]; then
と解釈されてエラー。
zsh は sh と違って $WAITSEC は "$WAITSEC" と同じ意味なのでエラーにならない。

"$WAITSEC" -lt 60 と書き換えた場合は、

>-z "$WAITSEC" の成否にかかわらず $WAITSEC -lt 60が実行されちゃってるから問題なんじゃないか?

この理由で正しい。


378 名前:login:Penguin mailto:sage [2007/12/11(火) 22:53:04 ID:8t30b6aC]
シェルスクリプトにコメントを書くには
# comment

っていう感じに # を行頭につけてコメントにしますが、自作のシェルスクリプト等に
日本語でコメントを埋め込むのは良くない事なのでしょうか?
英語でコメントを埋め込むべきなのでしょうか?

理由>環境によっては文字化けするかもしれないから

その場合、英語では上手くコメントがかけないのですが、、、皆さんはこの辺どうしていますか?

379 名前:login:Penguin mailto:sage [2007/12/11(火) 23:22:06 ID:8VUAk6YG]
>>378
英語では上手くコメントがかけない、って、自分が書いた自分用のスクリプトだったら、
べつに、自分にさえ分かればいいんじゃないの?極端な話、ローマ字で書いた日本語でもいいんじゃないかと。

380 名前:login:Penguin mailto:sage [2007/12/11(火) 23:27:45 ID:LcSZkVoI]
Shift_JISで書いて2バイト目に ¥ が含まれるとコメントが継続しちまうかな、
と思ったんだが、そうでもないみたいだな。


381 名前:login:Penguin mailto:sage [2007/12/12(水) 08:33:10 ID:itajSrlG]
>>379
いやー、他の人にもスクリプトの内容が分かるようにコメント書かないといけない場合はどうすれば?
今はローマ字で書いたりしていますが、さすがに見にくいというか・・・ かといって英語では上手くかけないし・・
C言語やJava等では // 日本語コメント が使えるし
MS-DOSの.batファイルでも
REM 日本語コメント
が使える、Windows Script Hosting(WSH)であっても
'日本語コメント
が使えて、大抵のスクリプト言語は日本語のコメントが使えるのになぜにLinuxのシェルスクリプト
だけこんな事で悩まないといけないんだろうと・・・。
まぁOSが違うから文字コード周りのトラブルなんだろうけど・・。

382 名前:login:Penguin mailto:sage [2007/12/12(水) 09:12:34 ID:fnWAKO+5]
使えるか使えないかっていうなら使えるだろ。
確実に自分しか使わないならShift_JISのようなbrain damagedな文字コードじゃなきゃ
別に何でもいいんじゃない。
しかし使ってよいか使わざるべきかというと、一般にスクリプトって
どのロケールで実行されるかわからないよとかの問題が出てくる。
あなたが出した例ではCやJavaのソースファイルはコンパイルするときの
環境が限定できれば問題ないし、DOSのバッチファイルも日本語DOSしか
考えていない。

383 名前:login:Penguin mailto:sage [2007/12/12(水) 11:25:06 ID:ytRjAEEx]
>Shift_JISで書いて2バイト目に ▼ が含まれるとコメントが継続しちまうかな、

sjis だろうが何だろうがコメントの継続なんてありません。

>しかし使ってよいか使わざるべきかというと、一般にスクリプトって
>どのロケールで実行されるかわからないよとかの問題が出てくる。

コメントにロケールなんて関係ありません。


384 名前:login:Penguin mailto:sage [2007/12/12(水) 11:32:57 ID:11rQvfIz]
英語くらい書けよ。

385 名前:login:Penguin mailto:sage [2007/12/12(水) 12:33:25 ID:5zz/Y7Bm]
っつか、どういう環境(=人間環境)だか知らないけど、
そんな雰囲気だと、頑張って英語でコメントを書いても、
肝心の「他の人」が、それを理解出来ない、
ということが容易に想像出来てしまうわけで、
だったらローマ字でいいじゃん、と思う。

386 名前:login:Penguin mailto:sage [2007/12/15(土) 11:57:10 ID:FOfJjZuV]
>>383
コメントってのは実行されるときはロケール関係ないけど
元々読むものだから、ロケールばらばらと読みにくくて困るよね
って意味だよ。たぶんね。



387 名前:login:Penguin mailto:sage [2007/12/19(水) 22:19:06 ID:qeHYVBDH]
#!/bin/bash
for i in *.txt
で、'*.txt' で展開されるリストの長さに制限はある?

ls: argument list too long になる長さでも処理できるようだが、他に何か別の制限はある?

388 名前:login:Penguin [2007/12/20(木) 18:50:14 ID:Qtkk7tpx]
sedについての質問です

aaa
bbb
ccc

という出力を、sedコマンドで一行にしたいのです。
aaa bbb ccc このように。
どうしたらよいですか。

逆の、sed -e 's/\ /\n/g' はできるのですが。

389 名前:login:Penguin mailto:sage [2007/12/20(木) 21:20:24 ID:1r8qT2Sh]
awkなら
$ (出力するコマンド) | awk '{printf("%s ", $0)}'
でできるんだけどなぁ

390 名前:login:Penguin mailto:sage [2007/12/20(木) 21:47:48 ID:p9kMPhFx]
$ cat input
aaa
bbb
ccc
$ sed -n 'H;${g;s/¥n/ /g;s/^ //p;}' input

なんか無様だ。きっともっとスマートに出来るに違いない。


391 名前:login:Penguin mailto:sage [2007/12/20(木) 21:49:27 ID:p9kMPhFx]
もし各行が空白文字を含まないなら、
echo `cat 元テキスト` > 新テキスト
でいいな。



392 名前:login:Penguin mailto:sage [2007/12/20(木) 22:14:22 ID:IRXLh3Ok]
>>388
sed ':loop; N; s/\n/\ /g ;$!b loop' hoge

393 名前:login:Penguin mailto:sage [2007/12/20(木) 22:19:20 ID:UDgG5/dT]
sedにこだわらなければ
tr -s '\n' ' ' < input
とか


394 名前:login:Penguin mailto:sage [2007/12/20(木) 22:28:20 ID:p9kMPhFx]
目的によっては、
$ fmt input

fmtってUNIX標準?


395 名前:login:Penguin mailto:sage [2007/12/20(木) 22:39:06 ID:Qtkk7tpx]
>>389-393
こんなにレスが来るとは。
皆さんありがとうございます。

すべて試してすべてで出来ました。
echoとtrはなるほどという感じです。
他は知りませんでした。レベル1アップですね。

396 名前:login:Penguin mailto:sage [2007/12/20(木) 22:43:02 ID:Qtkk7tpx]
>>394
更新遅れた。
できました。オプションすらいらないとは。



397 名前:login:Penguin mailto:sage [2008/01/06(日) 19:04:19 ID:tfZRITK8]
awkで
awk '{print $2,$3}' とすると2,3番目が表示されますが
二番目以降全て表示するにはどうすればいいのでしょうか?

398 名前:login:Penguin mailto:sage [2008/01/06(日) 19:44:21 ID:TN85yzo6]
awk 'gsub($1,"")'

399 名前:login:Penguin mailto:sage [2008/01/06(日) 21:41:07 ID:HrtO6pOF]
$1に特殊文字が入れられると思わぬ結果になりそうな気がする。

400 名前:login:Penguin mailto:sage [2008/01/06(日) 21:53:19 ID:xjxCtnUs]
awk '{for (i=2;i<=NF;i++){printf($i" ")}}'

401 名前:login:Penguin mailto:sage [2008/01/06(日) 22:56:50 ID:HrtO6pOF]
フィールド区切が複数のスペースやタブコードでも、1個のスペースに置換されてしまう気がする。
>>397の「全て」がそこまで求めているかは分からないが。

402 名前:login:Penguin mailto:sage [2008/01/07(月) 00:59:34 ID:Lq+3ioDo]
>>401
awk -Fなにか  '{for (i=2;i<NF;i++){printf("%s%s", $i, FS)};print $NF}'

403 名前:397 mailto:sage [2008/01/07(月) 02:29:17 ID:SZZlXYY6]
ありがとうございます。
最初 >>387 さんと同じことを思ったのですが他に
オプションか何かで用意されていると思ってました。
402さんのを使わせていただきます


404 名前:397 mailto:sage [2008/01/07(月) 02:29:58 ID:SZZlXYY6]
s/387/398

405 名前:login:Penguin mailto:sage [2008/01/07(月) 17:21:59 ID:CzyB4/IB]
>>402
これだと複数の空白が一つになって表示される



406 名前:login:Penguin mailto:sage [2008/01/07(月) 18:30:26 ID:DBTZ8VT2]
awk '{gsub($1, "");print substr($0,2)}'




407 名前:login:Penguin mailto:sage [2008/01/07(月) 18:59:30 ID:AGg2gknU]
hint:
aho,choaho,kusoaho,doaho

awk '{print substr($0,length($1)+2)}'



408 名前:login:Penguin mailto:sage [2008/01/07(月) 20:07:07 ID:81ckgAQ5]
個人的には>>398をアレンジして、
gawk 'gsub(/^[[:blank:]]*[^[:blank:]]+/,"")'
かな。

409 名前:login:Penguin mailto:sage [2008/01/07(月) 20:13:04 ID:DBTZ8VT2]
なんだ>>398で既出だったのね。見落としスマソ。

410 名前:login:Penguin mailto:sage [2008/01/07(月) 23:07:24 ID:6d+dex8H]
[file1]
bar=234

[file2]
foo=123
Bar=987

と2つのkey=valueな内容が入ってるファイルがある。ここで、file1には
ないがfile2にはあるkeyのみ(case-insensitiveな比較で、また、valueは
違っていてよい)を拾いkey=valueを出力したいのだけど、一行で書けないかな?

どういう出力になってほしいかというと

 $ myuniq --split-char='=' --field-index=1 --print-unique file1 file2
 foo=123

というような実行イメージ。awkで

awk -F= '{ line[toupper($1)]=$0; seen[toupper($1)]++; } END { for (key in line) if (seen[key] == 1) print line[key]; }' file1 file2

みたいなのはでっち上げたんだけど、正直汚い。


411 名前:login:Penguin mailto:sage [2008/01/07(月) 23:30:18 ID:6RYIn4eu]
回答じゃなくてすまんのだが、最後にあるワンライナーだと、
2ファイル通して1回しか現れなかったものを表示するから、
「file1にはないがfile2にある」ものだけでなく
「file2にはないがfile1にある」も出てこないか?


412 名前:login:Penguin mailto:sage [2008/01/07(月) 23:35:18 ID:6RYIn4eu]
負けず劣らずかっこ悪いシロモノ

for w in `cut -d= -f1 file1 file2 |tr A-Z a-z|sort|uniq -c|sed -n 's/ 1 *//p'`; do grep "^$w=" file2; done


413 名前:login:Penguin mailto:sage [2008/01/07(月) 23:52:40 ID:DBTZ8VT2]
grep -v -i "`cut -d= -f1 file1`" file2

重複は無考慮


414 名前:login:Penguin mailto:sage [2008/01/07(月) 23:54:29 ID:6d+dex8H]
>>411
あ、すみません。バグです。が、元の仕様が厳しすぎで、

 どちらかにしかないエントリを出す

でも大丈夫でした。

 file1かfile2のどちらかにのみあるkeyに対応するkey=valueを出力する

に仕様を訂正させてください。

何をしたいのかというと、Windowsの環境変数を手元のUNIXな環境に
取り込みたいのですが、その際に自分で定義している分については
上書きされないようにしたいのです。

hostA$ env > hostA.env
hostB$ env > hostB.env
hostB$ myuniq ... hostA.env hostB.env > diff.env
hostB$ . ./diff.env

みたいなことをしたいと。で、片方の環境が Windows なもので、
case insensitiveな比較とかも必要になってます。

行全体ではなく特定のフィールドのみ見て uniq/diff 処理して出力って
簡単そうで微妙に面倒です。

415 名前:login:Penguin mailto:sage [2008/01/07(月) 23:59:58 ID:6d+dex8H]
>>413
おおー。grepのexprに改行入れるとそんな動作になるとは!
エレガントです。勉強になりました mOm

416 名前:login:Penguin [2008/01/08(火) 18:35:59 ID:0P1F18Bp]
1行で2つのコマンドを実行するときに
2つ目に実行したコマンドに、1つ目に実行したコマンドの引数を
そのまま渡したい場合の記述方法がわからず、困っています。

$ vi hogehoge; echo ??
*??が不明箇所*

上記の例の場合は2つ目に実行しているecho文の出力結果でhogehogeを表示させたいのですが。。
対処方法はないでしょうか?
よろしくお願いいたします。



417 名前:login:Penguin mailto:sage [2008/01/08(火) 18:38:30 ID:k6k1za9N]
>>416
i="hogehoge"; vi $i; echo $i
じゃだめなん?

418 名前:416 mailto:sage [2008/01/08(火) 19:34:39 ID:0P1F18Bp]
>>417
ありがとうございます。
その方法があったことに気づきませんでした。
おかげで解決しました、感謝です><

419 名前:login:Penguin mailto:sage [2008/01/08(火) 23:12:30 ID:OqUgF6yk]
vi hogehoge; echo !$

420 名前:login:Penguin mailto:sage [2008/01/08(火) 23:26:00 ID:5sg6/WvN]
>>419
それタイプしたタイミングではまだ!$は前行のコマンドの。


421 名前:login:Penguin mailto:sage [2008/01/08(火) 23:33:15 ID:A2IkwjEN]
引数が一つだけなら

vi hogehoge; echo $_

でもいけるな。

422 名前:login:Penguin [2008/01/10(木) 13:02:51 ID:9dVYtTPe]
cshからJavaを呼び出すシェルを作成しています。

その呼び出したJava内部で例外が発生した場合、
以降のシェルの処理を続行させたくありません。

どの様にすればよいのですか?
Javaのcatch節でSystem.exit(1);とかで処理を終了させて、
cshでそれを検知する方法があるのかなぁ?
と漠然には思うのですが・・・


423 名前:login:Penguin mailto:sage [2008/01/10(木) 19:51:46 ID:qThypT9T]
>>422
System.exitが何をするのか分かっているなら、
Javaコマンドの終了値を普通にifなりswitchなりで受けて、csh側からもexitすれば良いだけでは?
単純に例外=即終了と決め打ちなら良いけど、例外によって複数の処理をさせたくなると、
System.exitの終了値を多数用意して管理しなければならなくなって面倒だけどね

ここからはポリシーの問題になるけど、System.exit等を使ってコマンドの終了値を利用するよりは、
どんな例外で終了したのかを前もって文字列等でstderrにでも吐き出したり、
終了した例外を表すような長さゼロのテンポラリファイルでも作ってから、Javaコマンドの方を終了させておいて、
csh側からは、むしろその文字列やファイル名を評価させてexitさせるようにした方が、後からデバッグする時とかは楽だよ

更に言えばシェルプログラミングにcshを使うのは止めるべき
www.klab.ee.utsunomiya-u.ac.jp/~hiroki/csh-whynot.euc
www.klab.ee.utsunomiya-u.ac.jp/~hiroki/sh-perl-tips/

424 名前:login:Penguin mailto:sage [2008/01/10(木) 21:50:31 ID:CJRDs9Ag]
Javaのポリシーは知らないが、エラーメッセージと終了コードは二者択一せにゃならんものではない気がする。

425 名前:login:Penguin [2008/01/11(金) 14:14:06 ID:mrGJLB/g]
>>423、424
ありがとうございます。

シェルスクリプト自体、経験が浅い上に今回の要望がcshというのが
決まっているもので・・・
困っています。。。
2chでの質問自体も初めてなもので・・・

準正常として扱うような例外は全てJava側で処理をしてプログラムは
正常終了として扱っています。
処理続行不可能と判断した、ランタイム系やIO例外などが発生した場合は
後続のシェルを流したくない。
という状況です。



if $JAVA_CMD
then
続き
else
exit 1
fi

以下処理続く
・・・
ってな感じにしたのですが、どうも上手くJavaでexitした値が取れないです。
文法が間違っているのですかね?
もう少し調査してみますが、上記の書き方で間違いがあればご指摘頂きたいです。

後は教えていただいた、テンポラリファイルでの判断も考えてみます。


426 名前:login:Penguin mailto:sage [2008/01/11(金) 15:11:54 ID:GLHvzQDj]
findコマンドの結果をツリービュー(treeコマンドの結果的なツリー表示)で出すコマンドまたは方法ってありますか?



427 名前:login:Penguin mailto:sage [2008/01/11(金) 16:08:44 ID:6CIbL1kG]
>>425
cshなら

$JAVA_CMD
if ($? != 0) then
  echo "failed"
  exit $?
endif

echo "OK"

でどう?

428 名前:login:Penguin [2008/01/11(金) 16:55:30 ID:mrGJLB/g]
>>427
ありがとうございます。
教えていただいた方法で、想定通りの動作になりました。


429 名前:login:Penguin mailto:sage [2008/01/11(金) 21:11:49 ID:OPXAXUzh]
>>426
普通にtreeコマンド使うんじゃだめなん??
findで絞った結果を出したいのかなぁ。


430 名前:login:Penguin mailto:sage [2008/01/11(金) 22:17:07 ID:4hqMEkJ5]
grep -f find結果 tree結果
とか。

# 本気にしないように。

431 名前:login:Penguin mailto:sage [2008/01/11(金) 23:02:21 ID:aloediIm]
基本的にはtree | grep なんちゃら でいいんじゃね?

432 名前:login:Penguin mailto:sage [2008/01/14(月) 11:50:49 ID:3iR1bkH0]
画像の特定の領域だけを一括でぼかしたいのですが
いい方法はありませんか?

433 名前:login:Penguin mailto:sage [2008/01/14(月) 12:00:15 ID:ZjONjaHo]
つ netpbm



434 名前:login:Penguin mailto:sage [2008/01/14(月) 12:12:55 ID:6n5zEajJ]
つimagemagick


435 名前:login:Penguin mailto:sage [2008/01/14(月) 14:01:26 ID:Or9vH7Fn]
メールアドレスの@以降の最後の国を表すCountry Codeの部分だけを抜き出すには
どのような正規表現を使えば良いでしょうか?

@hotmail.co.jp の.jp の部分を見る感じです。
.jp以外は無視する、という感じです。これで日本のメールしか相手にしない事になりますよね。

436 名前:login:Penguin mailto:sage [2008/01/14(月) 14:04:07 ID:ZjONjaHo]
spam避け?

日本からも.comや.netや.orgや.infoや.bizや.acや.tvや.toや(以下略)の
アドレスでメールが送られることはあるぞ。




437 名前:login:Penguin mailto:sage [2008/01/14(月) 14:04:25 ID:Or9vH7Fn]
$.jp

↑これでいいんでしょうか?正規表現全く知らない状態でネットでちょっと検索してみたのですが・・・

438 名前:login:Penguin mailto:sage [2008/01/14(月) 14:05:05 ID:Or9vH7Fn]
あっちゃー、そうなんですか・・・
海外のメールを相手にしない方法って無いんですかね・・・
英語でViagraとかうるさいんですよ。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<275KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef