シェルスクリプト総合 ..
331:320
07/11/17 10:54:12 oelt9+66
>>327
レスありがとうございます。
そうなんですよ、そんな風に展開されてしまうんですよ。
${DIR} だけを出力しても
./AVG Anti-Virus Free Edition 7.3
となるのに
"${DIR}" とダブルクォートで囲っても
./AVG Anti-Virus Free Edition 7.3
と全く同じ出力になってしまう。つまりダブルクォートが利いてない・・。
だからそれをどうすれば1つの文字列として扱えるのですか?空白を区切りとしないようにする為には・・・。
332:login:Penguin
07/11/17 12:01:58 dajSe2oX
>331
basename の結果が正しいんだからダブルクォートは効いてるだろ?
その後、`` で置き換えた時には既に "${DIR}" とは無関係の文字列なんだから
直書きされてるのと同様に空白で分割されてるだけ。
あえて書くなら
for DIR in ./*/
do
BASE=`basename "${DIR}"`
for TARG in "${BASE}"
do
echo ${DIR}
echo ${TARG}
done
done
っていうか、なんで 2 段で for を回す必要があるのか。
333:login:Penguin
07/11/17 12:23:43 dh2GLbwy
>>331
バッククォート内はコマンドの出力に置き換えされるんだから、その出力を
クォートすればいい。
for TARG in "`basename "${DIR}"`"
っていうか、なんで 2 段で…
334:320
07/11/17 22:43:03 oelt9+66
>>332-333
な、なるほど・・・・
お二人の解説文を10回ほど読み直しながらじっくり考えてみた所、ようやく理解できました。
特に "`basename "${DIR}"`" はややこしくて 最初は何をかいているのだろうかと思いましたが
`basename "{DIR}"` の出力結果そのものを " " で囲っているわけですね。なるほどなるほど。
う〜ん、これは思いつかない・・・。発想力ですか・・・。
で、2段でfor回していますが、確かに冷静に考えると2段で回す必要はありませんね・・・。
むしろ2段で回す処理にしている事で複雑化してしまった感があります。
1段forでいけそうです。
335:login:Penguin
07/11/23 15:28:58 P7OyMgNI
>326です。
拡張が必要になり、問題が増えました。
#!/bin/sh
echo $LIST; # "aaa aaa" "bbb" "ccc ccc ccc" "ddd"
func(){
〜処理〜
}
func "eee eee" "fff fff" "$LIST" "ggg ggg";
以下のようにfuncにスペースを含んだ形で
${LIST}とその他の値を同列に引数として渡したいのです。
↓funcに渡したい引数
"eee eee" "fff fff" "aaa aaa" "bbb" "ccc ccc ccc" "ddd" "ggg ggg"
>>328 >>330にあったように eval func で展開すると
LIST以外の引数がスペースで展開されてしまいます。
LIST以外の引数を "eee\ eee" とか"\"eee eee\""とする手で回避も可能ですが、
修正箇所が増えるので、極力この形は取りたくありません。
なにか方法はありませんか?
336:login:Penguin
07/11/23 22:55:10 rrMjYG9S
Σ^)/アホーアホー☆ミ-
337:login:Penguin
07/11/23 23:18:09 OSmgQwJo
uniqはsortしておかないとだめですが、
sortしなくても2回目意向の重複を削除するコマンド内ですか?
338:login:Penguin
07/11/23 23:25:42 KoVu18yL
some | command | perl -ne 'print unless $seen{$_}++'
339:login:Penguin
07/11/24 02:54:03 Qc2k01yB
>>335
func をスペースを分割しないで処理するようにして、
func に渡す前に "$LIST" だけ分割しちゃえば良いんじゃないの?
340:login:Penguin
07/11/24 13:44:38 3ItHeK84
>>338
おおおお、できました。ありがとうございました。
341:login:Penguin
07/11/24 15:57:48 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
07/11/24 16:23:59 bvlPAES0
grep -A1 "Nov 20" | grep -o "<.*@.*>"
343:login:Penguin
07/11/24 17:59:39 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
07/11/24 22:04:52 DnopHw8N
無理にシェルで書くより
perl かなんか使った方がいいんじゃね。
適材適所。
345:login:Penguin
07/11/24 22:28:40 bmHXinLt
eval set $LIST
func "eee eee" "fff fff" "$@" "ggg ggg"
346:login:Penguin
07/11/25 17:46:10 ex492j4k
>>345
これだ!
こんなトリッキーな手法もあるんですね。
奥が深い。ありがとうございました。
347:login:Penguin
07/11/25 22:12:54 nNUo7Vyu
>>342
ありがとうございました
348:login:Penguin
07/11/28 16:44:21 lxwXbk7L
特定のディレクトリ以下にあるディレクトリ名を検索し
そのディレクトリの中にファイルがあった場合のみ変数にディレクトリ名を追加する。
という処理をしたいと考えています。
LIST=`find 特定のディレクトリ -maxdepth 1 -mindepth 1 -type d`
上記のコマンドでディレクトリ一覧は取得できたのですが
取得したディレクトリ一覧の中にファイルがあるかどうかの条件設定方法がわかりません
ご教授ください
349:login:Penguin
07/11/28 16:51:01 hjQ8uHjr
>>348
GNU の find なら ! -empty で。
350:348
07/11/28 17:14:26 lxwXbk7L
>>349
レスありがとうございます。
LIST=`find 特定のディレクトリ -maxdepth 1 -mindepth 1 -type d ! -empty`
上記のコマンドで無事に条件を満たすことが出来ました。
感謝です><
351:login:Penguin
07/11/30 01:52:45 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
07/11/30 02:21:47 8mp/o88K
awk '{h[$1] = h[$1] " " $2} END { for (key in h) print key h[key] }' < input | sort
353:login:Penguin
07/11/30 13:45:29 zEAz9Kgp
>>352
惚れた
354:login:Penguin
07/12/01 01:13:52 285rAG3t
inputをリダイレクトしているのがイヤ。
355:login:Penguin
07/12/01 01:27:18 aR34EpD+
awkはファイル名を引数に取れるんだな。
パイプでしか使った記憶がなく、素で知らなかった。
356:login:Penguin
07/12/01 11:59:35 lphCOL1Q
むしろパイプでしか使えないコマンドの名前を
パッと挙げろという方がむつかしいだろ
357:login:Penguin
07/12/01 12:16:31 z08ppphA
オプションの引数という形もない、というものはだいぶ少ないね
358:login:Penguin
07/12/01 19:59:33 aR34EpD+
とっさに出てきたのは tr
359:login:Penguin
07/12/01 21:03:16 z08ppphA
MS-DOS 標準添付の SORT (.EXE か .COM か自身がない)
360:login:Penguin
07/12/01 23:25:16 +jVAJI5Z
MS-DOS 標準添付の MORE
361:login:Penguin
07/12/03 14:25:58 pB5IpK3Q
複数のコマンドを実行してログを残したいのですが
( { command1 && command2 } > normal.log ) >& error.log
で、標準出力と標準エラーをファイルにリダイレクトまではうまくいきました。
このエラー出力を、画面にも出すにはどんなふうに書くのでしょう?
URLリンク(x68000.q-e-d.net)
ちなみに、ここまではこの辺を参考にさせていただきました。
お願いいたします。
362:login:Penguin
07/12/03 14:26:53 pnpsuBAG
>>361
tee
363:login:Penguin
07/12/03 15:02:26 pB5IpK3Q
>>362
ありがとうございます
できました。
最初に言ってたのとちょっと違うのですが、ようは、すべてログに保存して
なおかつERRORの文字が入ってる行だけを画面に出力したかったので
2>&1 | tee file.log | grep ERROR
でやりたいことができました。
いろいろ勉強になりました。サンクス。
364:login:Penguin
07/12/03 16:10:39 +7LXyEUm
コマンドラインとGUIを融合するHotwire
URLリンク(opentechpress.jp)
365:login:Penguin
07/12/03 16:33:46 CJjSSdo9
>>364
面白そうだけど、記事の中に具体的な画像が欲しいね・・・・
366:login:Penguin
07/12/03 16:43:39 pm3xTTNy
>>365
URLリンク(code.google.com)
367:login:Penguin
07/12/03 17:31:20 BNt6sl0D
>>366
画像が表示されないのは、送ってくるContent-Typeがおかしいのか。
なんでapplication/octet-streamやねん。
368:login:Penguin
07/12/04 22:59:48 Bpu7L1AF
ややスレ違いだが、くだ質よりこっちかなと
シェルスクリプトの本を買う際に、Linuxユーザーでbashメインで使ってるなら
主旨がbash向けのものを買うべきですか?
それともB shell全般向けやsh向けでbashは補完程度の本でも質の高いものを買うべきでしょうか
両シェルの間にそれほど機能、性格の差はなさそうだし
369:login:Penguin
07/12/04 23:06:21 0gQg9Z1k
bashismって言葉があるくらいで、ついついbashの機能を使ってしまうことは多い。
素のBourne Shellの機能がどこまでなのか書いてある本がいいと思う。
370:login:Penguin
07/12/04 23:28:47 Bpu7L1AF
>>369
サンクス
sh向けでも最近の多くの書籍はbashもカバーしているようですので、その辺りを探してみます
371:login:Penguin
07/12/05 11:12:29 tDVDuECI
URLリンク(www.amazon.co.jp)
そのへん意識するならこれいいかも。
SunOS の bsh と FreeBSD の bsh ( ash ) で違いがある場合についてまで
明記されてる。
372:login:Penguin
07/12/05 21:59:53 KlliiKVC
>>371
その本と、「UNIXシェルスクリプトコマンドブック 山下 哲典」を最後に候補にしてましたが、後者を買いました。
sh、bash共用でサンプルが多いので。
373:login:Penguin
07/12/06 18:06:51 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
07/12/06 18:31:24 bgO18Eza
確かにbashだとなるねぇ。zshだとならんから気づかなかったw
#!/bin/bash
WAITSEC=$1
if [ -z "$WAITSEC" ] || [ $WAITSEC -lt 60 ]; then
WAITSEC=10
fi
echo $WAITSEC
とりあえずこれで。
375:login:Penguin
07/12/06 18:35:40 bgO18Eza
と、思ったら出来たw
if [ -z "$WAITSEC" -o \( $WAITSEC -lt 60 \) ]; then
こういうことだな。
優先順位がおかしいんだ。
376:login:Penguin
07/12/07 00:20:04 2WlU8Mqa
>>373
-z "$WAITSEC" の成否にかかわらず $WAITSEC -lt 60が実行されちゃってるから問題なんじゃないか?
おそらく -z "$WAITSEC"のときは 後ろの条件は 「-lt 60」になるだろうから、>>374のようにするか${WAITSEC:-0}とかやったらいいんじゃね?
377:login:Penguin
07/12/07 10:01:03 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
07/12/11 22:53:04 8t30b6aC
シェルスクリプトにコメントを書くには
# comment
っていう感じに # を行頭につけてコメントにしますが、自作のシェルスクリプト等に
日本語でコメントを埋め込むのは良くない事なのでしょうか?
英語でコメントを埋め込むべきなのでしょうか?
理由>環境によっては文字化けするかもしれないから
その場合、英語では上手くコメントがかけないのですが、、、皆さんはこの辺どうしていますか?
379:login:Penguin
07/12/11 23:22:06 8VUAk6YG
>>378
英語では上手くコメントがかけない、って、自分が書いた自分用のスクリプトだったら、
べつに、自分にさえ分かればいいんじゃないの?極端な話、ローマ字で書いた日本語でもいいんじゃないかと。
380:login:Penguin
07/12/11 23:27:45 LcSZkVoI
Shift_JISで書いて2バイト目に ¥ が含まれるとコメントが継続しちまうかな、
と思ったんだが、そうでもないみたいだな。
381:login:Penguin
07/12/12 08:33:10 itajSrlG
>>379
いやー、他の人にもスクリプトの内容が分かるようにコメント書かないといけない場合はどうすれば?
今はローマ字で書いたりしていますが、さすがに見にくいというか・・・ かといって英語では上手くかけないし・・
C言語やJava等では // 日本語コメント が使えるし
MS-DOSの.batファイルでも
REM 日本語コメント
が使える、Windows Script Hosting(WSH)であっても
'日本語コメント
が使えて、大抵のスクリプト言語は日本語のコメントが使えるのになぜにLinuxのシェルスクリプト
だけこんな事で悩まないといけないんだろうと・・・。
まぁOSが違うから文字コード周りのトラブルなんだろうけど・・。
382:login:Penguin
07/12/12 09:12:34 fnWAKO+5
使えるか使えないかっていうなら使えるだろ。
確実に自分しか使わないならShift_JISのようなbrain damagedな文字コードじゃなきゃ
別に何でもいいんじゃない。
しかし使ってよいか使わざるべきかというと、一般にスクリプトって
どのロケールで実行されるかわからないよとかの問題が出てくる。
あなたが出した例ではCやJavaのソースファイルはコンパイルするときの
環境が限定できれば問題ないし、DOSのバッチファイルも日本語DOSしか
考えていない。
383:login:Penguin
07/12/12 11:25:06 ytRjAEEx
>Shift_JISで書いて2バイト目に ▼ が含まれるとコメントが継続しちまうかな、
sjis だろうが何だろうがコメントの継続なんてありません。
>しかし使ってよいか使わざるべきかというと、一般にスクリプトって
>どのロケールで実行されるかわからないよとかの問題が出てくる。
コメントにロケールなんて関係ありません。
384:login:Penguin
07/12/12 11:32:57 11rQvfIz
英語くらい書けよ。
385:login:Penguin
07/12/12 12:33:25 5zz/Y7Bm
っつか、どういう環境(=人間環境)だか知らないけど、
そんな雰囲気だと、頑張って英語でコメントを書いても、
肝心の「他の人」が、それを理解出来ない、
ということが容易に想像出来てしまうわけで、
だったらローマ字でいいじゃん、と思う。
386:login:Penguin
07/12/15 11:57:10 FOfJjZuV
>>383
コメントってのは実行されるときはロケール関係ないけど
元々読むものだから、ロケールばらばらと読みにくくて困るよね
って意味だよ。たぶんね。
387:login:Penguin
07/12/19 22:19:06 qeHYVBDH
#!/bin/bash
for i in *.txt
で、'*.txt' で展開されるリストの長さに制限はある?
ls: argument list too long になる長さでも処理できるようだが、他に何か別の制限はある?
388:login:Penguin
07/12/20 18:50:14 Qtkk7tpx
sedについての質問です
aaa
bbb
ccc
という出力を、sedコマンドで一行にしたいのです。
aaa bbb ccc このように。
どうしたらよいですか。
逆の、sed -e 's/\ /\n/g' はできるのですが。
389:login:Penguin
07/12/20 21:20:24 1r8qT2Sh
awkなら
$ (出力するコマンド) | awk '{printf("%s ", $0)}'
でできるんだけどなぁ
390:login:Penguin
07/12/20 21:47:48 p9kMPhFx
$ cat input
aaa
bbb
ccc
$ sed -n 'H;${g;s/¥n/ /g;s/^ //p;}' input
なんか無様だ。きっともっとスマートに出来るに違いない。
391:login:Penguin
07/12/20 21:49:27 p9kMPhFx
もし各行が空白文字を含まないなら、
echo `cat 元テキスト` > 新テキスト
でいいな。
392:login:Penguin
07/12/20 22:14:22 IRXLh3Ok
>>388
sed ':loop; N; s/\n/\ /g ;$!b loop' hoge
393:login:Penguin
07/12/20 22:19:20 UDgG5/dT
sedにこだわらなければ
tr -s '\n' ' ' < input
とか
394:login:Penguin
07/12/20 22:28:20 p9kMPhFx
目的によっては、
$ fmt input
fmtってUNIX標準?
395:login:Penguin
07/12/20 22:39:06 Qtkk7tpx
>>389-393
こんなにレスが来るとは。
皆さんありがとうございます。
すべて試してすべてで出来ました。
echoとtrはなるほどという感じです。
他は知りませんでした。レベル1アップですね。
396:login:Penguin
07/12/20 22:43:02 Qtkk7tpx
>>394
更新遅れた。
できました。オプションすらいらないとは。
397:login:Penguin
08/01/06 19:04:19 tfZRITK8
awkで
awk '{print $2,$3}' とすると2,3番目が表示されますが
二番目以降全て表示するにはどうすればいいのでしょうか?
398:login:Penguin
08/01/06 19:44:21 TN85yzo6
awk 'gsub($1,"")'
399:login:Penguin
08/01/06 21:41:07 HrtO6pOF
$1に特殊文字が入れられると思わぬ結果になりそうな気がする。
400:login:Penguin
08/01/06 21:53:19 xjxCtnUs
awk '{for (i=2;i<=NF;i++){printf($i" ")}}'
401:login:Penguin
08/01/06 22:56:50 HrtO6pOF
フィールド区切が複数のスペースやタブコードでも、1個のスペースに置換されてしまう気がする。
>>397の「全て」がそこまで求めているかは分からないが。
402:login:Penguin
08/01/07 00:59:34 Lq+3ioDo
>>401
awk -Fなにか '{for (i=2;i<NF;i++){printf("%s%s", $i, FS)};print $NF}'
403:397
08/01/07 02:29:17 SZZlXYY6
ありがとうございます。
最初 >>387 さんと同じことを思ったのですが他に
オプションか何かで用意されていると思ってました。
402さんのを使わせていただきます
404:397
08/01/07 02:29:58 SZZlXYY6
s/387/398
405:login:Penguin
08/01/07 17:21:59 CzyB4/IB
>>402
これだと複数の空白が一つになって表示される
406:login:Penguin
08/01/07 18:30:26 DBTZ8VT2
awk '{gsub($1, "");print substr($0,2)}'
407:login:Penguin
08/01/07 18:59:30 AGg2gknU
hint:
aho,choaho,kusoaho,doaho
∴
awk '{print substr($0,length($1)+2)}'
408:login:Penguin
08/01/07 20:07:07 81ckgAQ5
個人的には>>398をアレンジして、
gawk 'gsub(/^[[:blank:]]*[^[:blank:]]+/,"")'
かな。
409:login:Penguin
08/01/07 20:13:04 DBTZ8VT2
なんだ>>398で既出だったのね。見落としスマソ。
410:login:Penguin
08/01/07 23:07:24 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
08/01/07 23:30:18 6RYIn4eu
回答じゃなくてすまんのだが、最後にあるワンライナーだと、
2ファイル通して1回しか現れなかったものを表示するから、
「file1にはないがfile2にある」ものだけでなく
「file2にはないがfile1にある」も出てこないか?
412:login:Penguin
08/01/07 23:35:18 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
08/01/07 23:52:40 DBTZ8VT2
grep -v -i "`cut -d= -f1 file1`" file2
重複は無考慮
414:login:Penguin
08/01/07 23:54:29 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
08/01/07 23:59:58 6d+dex8H
>>413
おおー。grepのexprに改行入れるとそんな動作になるとは!
エレガントです。勉強になりました mOm
416:login:Penguin
08/01/08 18:35:59 0P1F18Bp
1行で2つのコマンドを実行するときに
2つ目に実行したコマンドに、1つ目に実行したコマンドの引数を
そのまま渡したい場合の記述方法がわからず、困っています。
$ vi hogehoge; echo ??
*??が不明箇所*
上記の例の場合は2つ目に実行しているecho文の出力結果でhogehogeを表示させたいのですが。。
対処方法はないでしょうか?
よろしくお願いいたします。
417:login:Penguin
08/01/08 18:38:30 k6k1za9N
>>416
i="hogehoge"; vi $i; echo $i
じゃだめなん?
418:416
08/01/08 19:34:39 0P1F18Bp
>>417
ありがとうございます。
その方法があったことに気づきませんでした。
おかげで解決しました、感謝です><
419:login:Penguin
08/01/08 23:12:30 OqUgF6yk
vi hogehoge; echo !$
420:login:Penguin
08/01/08 23:26:00 5sg6/WvN
>>419
それタイプしたタイミングではまだ!$は前行のコマンドの。
421:login:Penguin
08/01/08 23:33:15 A2IkwjEN
引数が一つだけなら
vi hogehoge; echo $_
でもいけるな。
422:login:Penguin
08/01/10 13:02:51 9dVYtTPe
cshからJavaを呼び出すシェルを作成しています。
その呼び出したJava内部で例外が発生した場合、
以降のシェルの処理を続行させたくありません。
どの様にすればよいのですか?
Javaのcatch節でSystem.exit(1);とかで処理を終了させて、
cshでそれを検知する方法があるのかなぁ?
と漠然には思うのですが・・・
423:login:Penguin
08/01/10 19:51:46 qThypT9T
>>422
System.exitが何をするのか分かっているなら、
Javaコマンドの終了値を普通にifなりswitchなりで受けて、csh側からもexitすれば良いだけでは?
単純に例外=即終了と決め打ちなら良いけど、例外によって複数の処理をさせたくなると、
System.exitの終了値を多数用意して管理しなければならなくなって面倒だけどね
ここからはポリシーの問題になるけど、System.exit等を使ってコマンドの終了値を利用するよりは、
どんな例外で終了したのかを前もって文字列等でstderrにでも吐き出したり、
終了した例外を表すような長さゼロのテンポラリファイルでも作ってから、Javaコマンドの方を終了させておいて、
csh側からは、むしろその文字列やファイル名を評価させてexitさせるようにした方が、後からデバッグする時とかは楽だよ
更に言えばシェルプログラミングにcshを使うのは止めるべき
URLリンク(www.klab.ee.utsunomiya-u.ac.jp)
URLリンク(www.klab.ee.utsunomiya-u.ac.jp)
424:login:Penguin
08/01/10 21:50:31 CJRDs9Ag
Javaのポリシーは知らないが、エラーメッセージと終了コードは二者択一せにゃならんものではない気がする。
425:login:Penguin
08/01/11 14:14:06 mrGJLB/g
>>423、424
ありがとうございます。
シェルスクリプト自体、経験が浅い上に今回の要望がcshというのが
決まっているもので・・・
困っています。。。
2chでの質問自体も初めてなもので・・・
準正常として扱うような例外は全てJava側で処理をしてプログラムは
正常終了として扱っています。
処理続行不可能と判断した、ランタイム系やIO例外などが発生した場合は
後続のシェルを流したくない。
という状況です。
if $JAVA_CMD
then
続き
else
exit 1
fi
以下処理続く
・・・
ってな感じにしたのですが、どうも上手くJavaでexitした値が取れないです。
文法が間違っているのですかね?
もう少し調査してみますが、上記の書き方で間違いがあればご指摘頂きたいです。
後は教えていただいた、テンポラリファイルでの判断も考えてみます。
426:login:Penguin
08/01/11 15:11:54 GLHvzQDj
findコマンドの結果をツリービュー(treeコマンドの結果的なツリー表示)で出すコマンドまたは方法ってありますか?
427:login:Penguin
08/01/11 16:08:44 6CIbL1kG
>>425
cshなら
$JAVA_CMD
if ($? != 0) then
echo "failed"
exit $?
endif
echo "OK"
でどう?
428:login:Penguin
08/01/11 16:55:30 mrGJLB/g
>>427
ありがとうございます。
教えていただいた方法で、想定通りの動作になりました。
429:login:Penguin
08/01/11 21:11:49 OPXAXUzh
>>426
普通にtreeコマンド使うんじゃだめなん??
findで絞った結果を出したいのかなぁ。
430:login:Penguin
08/01/11 22:17:07 4hqMEkJ5
grep -f find結果 tree結果
とか。
# 本気にしないように。
431:login:Penguin
08/01/11 23:02:21 aloediIm
基本的にはtree | grep なんちゃら でいいんじゃね?
432:login:Penguin
08/01/14 11:50:49 3iR1bkH0
画像の特定の領域だけを一括でぼかしたいのですが
いい方法はありませんか?
433:login:Penguin
08/01/14 12:00:15 ZjONjaHo
つ netpbm
434:login:Penguin
08/01/14 12:12:55 6n5zEajJ
つimagemagick
435:login:Penguin
08/01/14 14:01:26 Or9vH7Fn
メールアドレスの@以降の最後の国を表すCountry Codeの部分だけを抜き出すには
どのような正規表現を使えば良いでしょうか?
@hotmail.co.jp の.jp の部分を見る感じです。
.jp以外は無視する、という感じです。これで日本のメールしか相手にしない事になりますよね。
436:login:Penguin
08/01/14 14:04:07 ZjONjaHo
spam避け?
日本からも.comや.netや.orgや.infoや.bizや.acや.tvや.toや(以下略)の
アドレスでメールが送られることはあるぞ。
437:login:Penguin
08/01/14 14:04:25 Or9vH7Fn
$.jp
↑これでいいんでしょうか?正規表現全く知らない状態でネットでちょっと検索してみたのですが・・・
438:login:Penguin
08/01/14 14:05:05 Or9vH7Fn
あっちゃー、そうなんですか・・・
海外のメールを相手にしない方法って無いんですかね・・・
英語でViagraとかうるさいんですよ。
439:login:Penguin
08/01/14 14:17:08 6n5zEajJ
/[あ-ん]/?
ひらがながないメールは無視してもよかろう。
440:login:Penguin
08/01/14 14:37:34 FCIPzPAY
ヘッダの Content-Type を見て弾くとかどうよ?
^Content-Type: .*iso-2022-jp
441:login:Penguin
08/01/14 14:42:36 6n5zEajJ
最近はutf-8なのも多いよ。
442:login:Penguin
08/01/14 14:54:07 JtG94m55
utf-8 は違法で、危険運転致死罪が適用になるんじゃ?
443:login:Penguin
08/01/14 22:54:28 RfE0b+o0
>>437
\.jp$
では?
444:login:Penguin
08/01/16 13:17:12 ZRO/FTzi
テキストファイルを、最後の3行を除いて出力したいのですが
何か良い書き方はないでしょうか。
sed '$d' xxxx | sed '$d' | sed '$d' と書くくらいしか思い付かなくて。
445:login:Penguin
08/01/16 14:26:14 1obpvu1A
>>444
head -n -3 foobar.txt
446:login:Penguin
08/01/16 17:01:38 IKqjky5V
awk '{a[NR]=$0}END{for(j=1;j<=NR-3;j++) print a[j]}' a.txt
447:login:Penguin
08/01/16 18:25:12 ZRO/FTzi
>>445
head のオプションは見落としてました…ありがとうございます
448:login:Penguin
08/01/16 21:56:01 KAlEWwYc
ランダムな数字が欲しいとき,どうするのが簡単?
1. $$
2. $RANDOM
3. /dev/urandom
4. 時計
あたりを思いついたんだけど
449:login:Penguin
08/01/16 22:14:57 yh54UVVr
ワシは、ランダムな数字の用途により生成手段を変えてるような気がする。
450:login:Penguin
08/01/16 22:16:21 KAlEWwYc
1. 偏りそう
2. bash依存
3.4. 面倒
という問題点があるから,誰かいい方法教えてくれないか?
451:login:Penguin
08/01/16 22:19:14 KAlEWwYc
>449 たしかに用途によって求められる強さが違う気がする.
とりあえずこうしとけ的な汎用的な方法はないんかな.
いちばん手軽な方法が知りたい
452:login:Penguin
08/01/16 22:47:32 HQvmxN1E
>>448
$$はスクリプト内で複数個必要だと使えない罠
dateのmanを見ていたら、
%N nanoseconds (000000000..999999999)
というのがあった。こんな感じ
% echo -n `date +%N`
431218994 % echo -n `date +%N`
857494685 % echo -n `date +%N`
269031777 % echo -n `date +%N`
803351248 % echo -n `date +%N`
195538275 % echo -n `date +%N`
538357509 % echo -n `date +%N`
058776188 %
453:login:Penguin
08/01/16 23:09:59 PJonPFmQ
jotはたぶんBSD系限定だよな。
jot -r 10 1 6
/dev/urandomは10進数テキストで得るのがめんどーだろうか。
dd if=/dev/urandom bs=2 count=1 2>/dev/null | od -vd
左カラムがじゃまだな。 sed 1q |cut -f2 -d' ' とかで削るか。
454:login:Penguin
08/01/16 23:21:36 KAlEWwYc
>452,453
なるほど.date +%Nはいい感じ.
jot便利そうだよ,jot.犬にもこんなの欲しいな.
ありがとう
455:login:Penguin
08/01/16 23:24:18 HQvmxN1E
od -t u1 /dev/urandom | awk '{print $2;exit}'
456:login:Penguin
08/01/16 23:33:28 PJonPFmQ
r=`fortune | md5sum - | sed 's/^¥(........¥).*/¥1/'`
r=`printf %d 0x$r`
ごめんなさいごめんなさい。
457:login:Penguin
08/01/16 23:51:47 puzD1M+G
普通に perl -e 'print int(rand(1000))' じゃダメなの?(perl5前提だけど)
458:login:Penguin
08/01/16 23:55:16 KAlEWwYc
>457 これだけのためにperlやawkを出してきたくないという貧乏心があってwww
459:login:Penguin
08/01/17 01:30:17 xe77Y4ah
時は金なり、というじゃない
460:login:Penguin
08/01/17 01:45:37 hGbWYs9C
つーか、乱数ってこれだけのため、っていうほど簡単なものじゃないと思う。
そういうものが必要な処理はシェルじゃなく、ちゃんとそれなりの言語でプログラムしたほうがいいかも。
461:login:Penguin
08/01/17 09:08:26 MJ2pzO6M
確かに簡単な乱数ならともかく、ちゃんとした乱数が欲しい処理は言語引っ張り出したほうが良いかもね
462:login:Penguin
08/01/17 09:18:44 wcByJn9i
% i=0; while [ $i -lt 1000 ] ; do echo "$i "`date +%N`; i=`expr $i + 1`; done \
| awk '{hist[int($2%10)]++} END{for (i in hist) {printf("%2d %5.2f%\n",i, hist[i]/NR*100) }; exit}' | sort -k1n
0 9.70%
1 10.70%
2 8.60%
3 11.00%
4 10.40%
5 8.90%
6 11.40%
7 9.70%
8 9.80%
9 9.80%
(´・ω・`)
% i=0; while [ $i -lt 1000 ] ; do echo "$i "`date +%N`; i=`expr $i + 1`; done \
| awk '{hist[int($2%10)]++} END{for (i in hist) {printf("%2d %5.2f%\n",i, hist[i]/NR*100) }; exit}' | sort -k1n
0 9.20%
1 12.30%
2 8.60%
3 11.00%
4 11.20%
5 9.30%
6 11.40%
7 7.80%
8 11.40%
9 7.80%
(゚д゚)
463:login:Penguin
08/01/17 09:28:02 wcByJn9i
% od -t u1 /dev/urandom \
| awk '{hist[int($2/256.0*10)]++} NR==1000{for (i in hist) {printf("%2d %5.2f%\n",i, hist[i]/NR*100) }; exit}' | sort -k1n
0 9.80%
1 9.50%
2 10.10%
3 9.80%
4 9.80%
5 9.40%
6 10.20%
7 10.20%
8 10.30%
9 10.90%
(´・ω・`)
% perl -e '$MAX=10;$LOOP=1000000; for (1...$LOOP) {$hist[int(rand()*$MAX)]++}; for (0..$MAX-1) {printf("%2d %4.2f%\n", $_, $hist[$_]/$LOOP*100) }'
0 9.98%
1 9.99%
2 9.99%
3 10.02%
4 10.03%
5 10.02%
6 9.92%
7 10.00%
8 10.00%
9 10.04%
(゚∀゚)
date +%Nは、ばらつきはともかく遅いな...
464:login:Penguin
08/01/17 10:59:36 bFGNQCBf
遅いのは date +%N じゃなくて while のループだと思うよ。
465:login:Penguin
08/01/17 11:37:17 LfhUWWyD
>>450
> 2. bash依存
ksh88由来らしい
URLリンク(www.cs.princeton.edu)
ksh互換を期待できるなら使ってもいいんじゃね
466:login:Penguin
08/01/18 01:58:10 S6Zw/ddB
/usr/games/random -e 100; echo $? は?
467:login:Penguin
08/01/18 07:42:17 YTGcRcKS
>>466
/usr/gamesってそれ何年前のWSのディレクトリ構成だよ...
468:login:Penguin
08/01/18 17:40:50 wVas3OI3
findの検索結果でディレクトリの場合は最後に「/」をつけさせたいのですが、いい方法はあるでしょうか?
469:login:Penguin
08/01/18 17:50:43 YTGcRcKS
find . -exec ls -Fd {} \;
470:login:Penguin
08/01/18 22:33:39 EJvy1m4k
>>468
find (検索ディレクトリ) -type d -printf "%p/\n" -or -print
471:login:Penguin
08/01/18 22:55:09 S6Zw/ddB
>>467
最新のLinuxの(いやほんと。これだけは伝統的理由で残ってるのかな)
472:login:Penguin
08/01/18 23:22:22 6BHP4h96
>471 鳥は?
473:login:Penguin
08/01/19 01:14:55 ZLNpfSkQ
>>472
Debian (sid)。まあ bsdgames とかまんまレガシーなパッケージだけだけどね。
474:login:Penguin
08/01/19 05:58:20 JWtUz7T2
Debian etch にも/usr/games はあるな。
中みたらbannerとfortuneが入ってた。
475:login:Penguin
08/01/19 08:07:34 njld/y5g
シェルスクリプトの本で実用例の多い本ってありませんか?
476:login:Penguin
08/01/19 17:07:33 NuJUp+KH
Fedora4を使っています
/start.txt内の記載が
12
254
3678
4
59
621
78
896
、、、、、、
と法則性の無い桁数の数字が2000行近くあるものを
/end.txtに
12,254,3678,4
59,621,78,896
、、、、
A,B,C,Dと4項目で1行に変換したいと思っています
start.txtから4行抜き出して end.txtに1行にする考え方でいい方法を教えていただけないでしょうか
よろしくお願いいたします
477:login:Penguin
08/01/19 18:46:40 ZLMZWyE0
cat /tmp/test.txt | awk 'NR%4{printf("%s,",$0)} !(NR%4) {print $0} '
余りが出たら最後カンマ付きで出力されちゃうけど
478:login:Penguin
08/01/19 18:55:41 NuJUp+KH
>>477
完璧な物ありがとうございます
今迄sedばかり使っていたのですがawkすごいですね
awkの勉強させていただきます
479:login:Penguin
08/01/19 18:59:10 IrN8xoLt
>>477 あらupしようとしたら同じだったわ。
awk '{printf"%s%s",$0,(NR%4?",":"\n")}' < start.txt
480:login:Penguin
08/01/19 19:02:55 NuJUp+KH
>>479
ありがとうございました
とても参考になります
481:login:Penguin
08/01/19 19:43:02 rxOILVvf
vi start.txt
q94J↓q10000@9
:%s/ /,/g
:w end.txt
482:login:Penguin
08/01/19 19:59:13 58USgOmq
>>473-474
Debianではゲームの実行バイナリは/usr/gamesに置かれるぜ。
最近はポリシーチェッカも警告を出すようになったから、lennyまでには移動完了するんじゃね。
URLリンク(lintian.debian.org)
URLリンク(lintian.debian.org)
483:login:Penguin
08/01/19 21:00:37 ZLNpfSkQ
>>482
なんでだろうね?
FHS誤解してたかと読み直したらそんなことないし。理由がわからん。
484:login:Penguin
08/01/19 21:04:24 ZLNpfSkQ
ごめん上は嘘。Debian Policy には
As described in the FHS, binaries of games should be installed in the directory /usr/games.
This also applies to games that use the X Window System.
Manual pages for games (X and non-X games) should be installed in /usr/share/man/man6.
とか書いてあった。FHSをgrepしたら、正式なセクションはないが、optionalとしてgames作っていいと
書いてあった。
485:login:Penguin
08/01/19 21:14:55 Xt/fDApd
FHSとかグローバリゼーションとか国際化とか
そういうのが全て悪の元凶。
486:login:Penguin
08/01/19 22:06:40 ZLNpfSkQ
FHSは/usr/localと/etcを綺麗にしてくれる。
それだけでも推進されてしかるべき。
487:login:Penguin
08/01/20 02:02:52 dexE1e0m
/usr/gamesはオプションなのに、/usr/local/gamesは必須扱いなところを見れば分かるとおり
ディトリビュータはゲームなんか提供すんな、ということなのだよ。
つまりゲームを提供しているDebianは人々を堕落させる悪のディストリビュータなのだ!
488:login:Penguin
08/01/20 02:23:04 kH+ebKTA
>>487
なにその陰謀史観(w
単に /usr/ 直下はディストリの管轄だし自分で決めろ、
一方で /usr/local/* は空フォルダ切っておく以上は認められないから
代わりとして、せめて誘導できるように切っておけ、ということかと。
FHSで自分的に従来慣習と比較して見慣れないのは/srvだな。
どこのUNIXでの慣習だったんだろう?
489:login:Penguin
08/01/20 02:55:38 M1QHfiRt
つっこみどころは
/usr/games/bin/fortune じゃなくて
/usr/games/fortune ってとこじゃなかったのかー
490:login:Penguin
08/01/20 04:01:16 FZKKsnAp
>>476
sed ':b;1~4,+2{N;s/\n/,/;bb}'
sedも心の片隅にでも置いておいてやってくだされ。
491:login:Penguin
08/01/20 04:20:45 IwRos1VB
>>489
管理者のPATHからゲーム関係を除外するのが目的だろうから
/usr/games/binとサブディレクトリを掘る必要はないんじゃね。
492:login:Penguin
08/01/21 02:31:10 HJiECvMS
>>490
そんな記法初めて見た…
どうなってんの???
493:login:Penguin
08/01/21 02:55:10 QTxOOwHl
アドレス指定がGNU拡張?
494:login:Penguin
08/01/21 11:41:48 JvqHER/W
>>476
paste -d, - - - -
paste も心の片(ry
495:login:Penguin
08/01/21 14:42:32 svPtjQeo
次のようなファイルがあるとします。
$ cat name.txt
name1
name2
name3
name4
name5
$ cat weight.txt
weight1
weight2
weight3
weight4
weight5
このとき、なんとかして
$ ???????????
name1 weight1
name2 weight2
name3 weight3
name4 weight4
name5 weight5
と表示したいのですができません。
最初は
$ cat name.txt weight.txt > data.txt
$ awk '{ if(NR<=5) a[NR]=$0; else b[NR-5]=$0} end{for(i=1;i<=100;i++) printf i,a[i],b[i];}' data.txt
としましたが、空白が表示されるだけでした。
496:login:Penguin
08/01/21 14:51:31 N+zVQlnl
>>495
paste
497:login:Penguin
08/01/21 14:53:35 svPtjQeo
>>496
ありがとうございました。
ぐぐるまでもヘルプ読むまでもなく、
適当にいじっただけでそうなりました。
498:login:Penguin
08/01/22 11:11:17 DOTIpHDE
gawk 'FILENAME != old {i=0;old=FILENAME} {data[i++] = data[i]" "$0;} END{for(j=0; j<i; j++)print data[j]}' name.txt weight.txt
gawk 'FILENAME != old {i=0;old=FILENAME} {data[i++] = data[i]" "$0;} END{for(j=0; j<i; j++)print data[j]}' name.txt weight.txt height.txt
ファイル数に制限はない。あと出力される行数は、最後のファイルの行数によって決まってしまうがな。
499:login:Penguin
08/01/25 13:18:49 u9KTnE0i
ランダムに壁紙を表示するスクリプト作ってみました
一応予想通りに動いてるようですが問題点や改善点があったら叩いてくだしあ
#!/bin/sh
EXT='.jpeg$|.jpg$|.png$'
LIST=`ls $1 | grep -Ei $EXT`
if [ "$LIST" = '' ] ; then\
echo "No files found in $1."
exit
fi
NUM=`echo $LIST | wc -w`
N=`expr $RANDOM % $NUM + 1`
TARGET=`echo $LIST | cut -d ' ' -f $N`
#echo "$1/$TARGET"
bsetbg $1/$TARGET
500:login:Penguin
08/01/25 15:41:59 5ugSsaO2
>>499
そのままだと画像ファイル名やパスに空白があると動かないけど、いいのか?
501:login:Penguin
08/01/25 17:04:10 HizVC3Pf
#!/usr/bin/python
import sys, os, random
def is_image(filename):
EXT = ('jpeg', 'jpg', 'png')
return any(filename.endswith(ext) for ext in EXT)
if sys.argv[1:]:
dir = sys.argv[1]
else:
dir = os.path.curdir
files = filter(is_image, os.listdir(dir))
if not files:
print "No images found in %s" % dir
sys.exit(1)
target = random.choice(files)
os.system("echo bsetbg '%s'" % os.path.join(dir, target))
# 高級言語って素晴らしいね
502:login:Penguin
08/01/25 17:51:17 u9KTnE0i
>501 ちょwwスレタイwww
修正してみました
#!/bin/sh
EXT='.jpeg$|.jpg$|.png$'
if [ "$1" = '' ] ; then\
DIR=`pwd`
else\
DIR="$1"
fi
LIST=`ls "$DIR" | grep -Ei "$EXT"`
if [ "$LIST" = '' ] ; then\
echo "No files found in $DIR."
exit
fi
NUM=`echo "$LIST" | wc -w`
N=`expr "$RANDOM % $NUM + 1"`
TARGET=`echo "$LIST" | cut -d ' ' -f "$N"`
#echo "$DIR/$TARGET"
bsetbg "$DIR/$TARGET"
503:login:Penguin
08/01/25 18:55:56 u9KTnE0i
>502 事故レス
expr はクオートしちゃまずかった
504:login:Penguin
08/01/26 00:32:05 0LMYrtfF
個人的には NUM= 以降を配列でやらせることが多いので、わりと bash を使う。
#!/bin/bash
DIR=$1
IFS='
'
TARGET=(`find "${DIR:=.}" -maxdepth 1 \( -name '*.[Jj][Pp][Ee][Gg]' -o -name '*.[Jj][Pp][Gg]' -o -name '*.[Pp][Nn][Gg]' \)`)
if [ ${#TARGET[@]} -eq 0 ]; then
echo "No files found in ${DIR:=.}"
exit -1
fi
#echo ${TARGET[`expr ${RANDOM} % ${#TARGET[@]}`]}
bsetbg ${TARGET[`expr ${RANDOM} % ${#TARGET[@]}`]}
とか。
505:login:Penguin
08/01/26 00:54:55 a+SvfS+1
>>504
おまいさんの find には -iname は無いのか?
あと、bash なら自前で算術計算できるよ
bsetbg "${TARGET[RANDOM % ${#TARGET[@]}]}"
506:login:Penguin
08/01/26 01:31:49 Gp61cAWI
>おまいさんの find には -iname は無いのか?
あ、これは知らんかった。有り難う。
>あと、bash なら自前で算術計算できるよ
こちらは知っていたけど、元ネタに合わせんと。
507:login:Penguin
08/01/26 11:11:47 NixStw3D
#!/bin/sh
filesize=('du -h ~/file.tmp')
$loglen > ~/filesize.txt
という感じでfile.tmpのファイルサイズを出力したいのですが
出力結果に不要な部分があります。
欲しい部分だけ切り取るには、どうすればいいでしょうか?
よろしくお願いします。
100k /home/user/file.tmp
~~~~~ ~~~~~~~~~~~~~~~~~~~~
↑ ↑
欲しい 要らない部分
508:login:Penguin
08/01/26 11:20:53 NixStw3D
#!/bin/sh
filesize=('du -h ~/file.tmp')
$filesize > ~/filesize.txt
間違えてしまいました。こんな感じです。
grepで抽出するオプションの書き方も思い付かず
スクリプトで処理するには・・・?と、行き詰まってます。
509:login:Penguin
08/01/26 11:34:50 opXPKDAo
>>508
cut (coreutils)
510:login:Penguin
08/01/26 11:48:51 NixStw3D
>>509
ヒントありがとうございます。
使い方を調べてみます。
511:login:Penguin
08/01/26 12:47:23 NixStw3D
>>509
もう少しヒントをください。
cat と coreutils のどちらかを使うや
cat か coreutilsのどちらかを使うかや
レスの意図を示していただけるとありがたいです。
シェルスクリプト歴数時間で理解が及ばなく申し訳ないです。
512:login:Penguin
08/01/26 12:52:39 K0Rp0izE
>511 ちょっとでもぐぐってみたのかと.
あと猫じゃなくて切るほうな.
513:login:Penguin
08/01/26 13:12:20 NixStw3D
>>512
調べてみたのですが、広範囲になってきて混乱してきました。
今のところ
cat -Tというオプションと、rtというコマンドを発見して
コンソール上で
du -h /home/user/file.tmp|cat -T|tr "^I/home/user/file.tmp" " "
とすると、ファイル数だけ表示されるようになったので
うまい方法でもないような気もしつつに
#!/bin/sh
filesize=('du -h /home/user/file.tmp|cat -T|tr "^I/home/user/file.tmp" " "')
$filesize > ~/filesize.txt
としてみたのですが
$./filesize.sh
↓うまく実行できずに困っています。
du: invalid option -- T
du: invalid option -- |
du: invalid option -- t
du: invalid option -- r
詳しくは `du --help' を実行して下さい.
514:login:Penguin
08/01/26 13:15:18 K0Rp0izE
>513 catじゃなくてcut.たぶんこれ一発でやりたいことはできると思うから調べてみな.
515:login:Penguin
08/01/26 13:22:31 NixStw3D
>>512,514
ありがとうございます。
素で間違えていました。
調べてみます。
516:login:Penguin
08/01/26 13:24:02 ShBosd97
stat -c %s
ではだめなのか
517:login:Penguin
08/01/26 13:43:18 NixStw3D
コンソールで
$ du -h /home/user/file.tmp|cat -T|cut -d ^ -f 1
としたらうまくファイルサイズだけ切り出せたので
#!/bin/sh
filesize=('du -h /home/user/file.tmp|cat -T|cut -d ^ -f 1')
$filesize > ~/filesize.txt
と、してみたのですが
なにか基本的な構文がおかしいのでしょうか?
バックスラッシュやシングル、ダブルクォーテーションを試してみましたが回避できません。
↓
du: invalid option -- T
du: invalid option -- |
du: invalid option -- u
du: invalid option -- t
du: invalid option -- d
du: invalid option -- f
詳しくは `du --help' を実行して下さい.
>>516
ヒントありがとうございます。
調べてみます。
518:login:Penguin
08/01/26 14:22:43 /buRKO/4
>>517
これでいいだろ。
du -h /home/user/file.tmp | awk '{print $1}' > ~/filesize.txt
519:login:Penguin
08/01/26 16:30:30 NixStw3D
>>518
調べたらawkは強力で、いろいろ使えそうです。
出力も当初の予定通りで完璧でした。
ありがとうございます。
結果を変数に代入出来なくなりましたが、構文を参考に>>517を直したら同様の出力結果で動きました。
#!/bin/sh
du -h /home/user/file.tmp | cat -T | cut -d ^ -f 1 > ~/filesize.txt
>>516
>>518さんを参考に手を入れたらキロバイト表示もできました。
ありがとうございます。
ただ、数字の後ろに「k」を入れる方法が判りませんでしたが。
#!/bin/sh
stat -c %s /home/user/file.tmp | awk '{printf "%s" ,$1/1024}' > ~/filesize.txt
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5366日前に更新/275 KB
担当:undef