トップページunix
1001コメント297KB

シェルスクリプト総合 その22

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。2013/11/01(金) 07:58:50.52
シェルスクリプトの総合スレです。
□お約束
・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。
 bash/zsh/ksh/ashなどに依存する場合は明示しましょう。
 Linuxユーザは/bin/shの正体がbashまたはdashなので特に注意。
 FreeBSDユーザは/bin/shの正体がashなので注意。
 v7 shに一番近くて、現役のshは、OpenSolaris由来のheirloom sh。
  http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/sh/
  http://heirloom.sourceforge.net/sh.html
・csh/tcshのシェルスクリプトは推奨されません。
 (理由は「csh-whynot」でググれ)
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
 manや参考リンクを見ましょう。
 aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルで使えるワイルドカード等は正規表現ではありません。
 正規表現の話題はスレ違い(正規表現スレへ)
・シェルスクリプトのことをシェルってゆーな
□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
 awkまたはperlの方が適した処理にはそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。
□回答者への注意事項:
・シェルスクリプトでの処理方法を質問しているのに、よくわからずに
 「そういうのはperl使いましょう」と回答するのはやめましょう。
 安易にperlに逃げずにシェルスクリプトで処理するのが頭のいいやり方。
前スレ
シェルスクリプト総合 その21
http://toro.2ch.net/test/read.cgi/unix/1352973453/
0793名無しさん@お腹いっぱい。2014/06/08(日) 17:53:32.13
>>792
ありがとう。
httpで件数だけ埋め込む作業要らなくなった

${#配列名[*]}で取り出せるのか
こんな#が合ったなんて知らなかったよ
0794名無しさん@お腹いっぱい。2014/06/08(日) 21:41:28.47
テンポラリファイルの扱いについて訊きたい

一部のファイルをrmしてないバグがあるスクリプトを走らせてしまい/tmpに多数ファイルを残してしまった
このようなミスを抑える対策とかありますか
0795名無しさん@お腹いっぱい。2014/06/08(日) 21:45:16.18
>>794
入力、処理、出力、という流れを意識して、設計書を書き、
ポイントポイントで処理の目的に即したテスト項目を作って、
結果を他人が評価できるようにテストを実施することだよ
0796名無しさん@お腹いっぱい。2014/06/08(日) 22:51:32.33
>>794
シェルスクリプト一般だと、tmpfile(3)みたいにプログラムが終わると勝手に消える
ようにするのは難しいだろうね。頑張れば出来るかもしれないけど・・。

一時ファイルというと、とりあえずファイル名に$$を入れたりすることが多いけど、
そういうのを含めない(可能なら固定名にする)のが、バグがあっても
悲惨なこと(/tmpが枯渇するなど)にならない設計方法のひとつ。
もちろん可能な場合だけど
0797名無しさん@お腹いっぱい。2014/06/08(日) 23:43:54.83
>>794
オブジェクト指向で設計し、インスタンスの寿命が尽きる時にファイルが消去されてることを確認し、されていなければ破棄する。
サポートされていない言語だと例外時に忘れがちなので注意。
0798名無しさん@お腹いっぱい。2014/06/08(日) 23:53:29.64
開始時に mkdir /tmp/アプリ名-プロセス番号/ してそこに作業ファイルを置いて、終了時に
rm -f /tmp/アプリ名-プロセス番号 すれば良いだけでは?
trap 使えば SIGTERM とか SIGINT にも対応できるし、bash なら終了時にキックもできる。

複数インスタンスの稼働を想定しないなら >>796 の言うように名前固定して、既存ファイルが
ある場合にエラーでとまるようにするとかもアリかな。
0799名無しさん@お腹いっぱい。2014/06/09(月) 00:03:28.76
小手先の対応で何とかするよりも、ちゃんとテストする方がよかろうよ
0800>>7942014/06/09(月) 00:26:53.38
>>795-799
チェック漏れがこんなことになるとはなあ
/mntにはtempfsをマウントしていないから簡単には使い切れないのが幸いだった

tempfileとrmをループ外へ追い出してみるのと、こんな感じで一時ファイルの場所の移動を試してみます
export TMPDIR=$(mktemp -d)
trap "rm -rf $TMPDIR" EXIT

>>797
言葉足らずで申し訳ない。問題のスクリプはzshスクリプトです
0801名無しさん@お腹いっぱい。2014/06/09(月) 00:57:13.18
>>797はからかってるか、マジボケかのどっちかだろうよ
0802名無しさん@お腹いっぱい。2014/06/09(月) 02:38:45.23
trap "command" EXIT
なんて用法があったのか。やはりこのスレは勉強になる
0803名無しさん@お腹いっぱい。2014/06/09(月) 11:27:14.45
>>801
実装ミスであるなら、どんな仕組みを使っても同じ。
設計手法はそういったミスを抑えるためにもある。
そして設計ミスが生まれる。

おそらくは例外時だろうけど、具体的なバグを聞かないと実装による対処方法は確定しない。
0804名無しさん@お腹いっぱい。2014/06/09(月) 11:33:19.20
それより一時ファイルを作らない方法でシェルスクリプトを記述するのがいいよ。
パイプやコマンド置換でかなりのところまで行ける。
どうしても一時ファイルが要る場合でも、openしたまま先にrmしとくとかでかなり対処できる。
trap 'rm file' 0 とかで消すのはkill -9 された場合は無理だし。
0805名無しさん@お腹いっぱい。2014/06/09(月) 13:22:45.34
トラップ一家物語
0806名無しさん@お腹いっぱい。2014/06/09(月) 15:57:02.71
Cでオブジェクト指向っぽい事するのは例があるけど、
シェルスクリプトでやるのは労力に見合うのだろうか…
0807名無しさん@お腹いっぱい。2014/06/09(月) 16:03:28.20
Perlのblessされたスカラのリファレンスのようなもの?
0808名無しさん@お腹いっぱい。2014/06/09(月) 16:39:23.19
そもそも構造体がないからねえ
0809名無しさん@お腹いっぱい。2014/06/09(月) 20:29:57.19
そんなのより関数作るのが先だろ
0810名無しさん@お腹いっぱい。2014/06/09(月) 23:23:09.12
HEADER
AA(55)
AA(20)
FOOTER
となっているファイルを食わせて、
HEADER
AA(11)
AA(4)
FOOTER
を吐かせたい。
つまり()内の数値を5で割ったものを吐かせたいんだが、これをshでやるとしたらどういうやり方する?
試しにsed噛ませようと試みたけどあれ演算するのすごいめんどくさそうで
0811名無しさん@お腹いっぱい。2014/06/09(月) 23:39:14.15
つawk
0812名無しさん@お腹いっぱい。2014/06/09(月) 23:41:42.95
$ expr "AA(55)" : ".*(\([[:digit:]]\+\)).*"
55
$ echo $((55/5))
11
$
0813名無しさん@お腹いっぱい。2014/06/10(火) 00:06:17.61
IFS=
sed -e 's/\$/\\$/' -e 's!\(([0-9][0-9]*)\)!(\$((\1/5)))!g' | while read l; do eval echo "\"$l\"";done
0814名無しさん@お腹いっぱい。2014/06/10(火) 00:24:48.89
sedの中で$((\1/5))なんて出来るのか?
0815名無しさん@お腹いっぱい。2014/06/10(火) 00:55:00.72
出来ないね。でも>>813は要求仕様通りに動作する。
0816名無しさん@お腹いっぱい。2014/06/10(火) 01:23:49.76
$$(expr 式)
0817名無しさん@お腹いっぱい。2014/06/10(火) 09:08:48.05
>>814
sedにshスクリプトを書かせてるわけだね。
0818名無しさん@お腹いっぱい。2014/06/10(火) 10:03:19.34
今時の sh は bash か ksh93 が標準なのか…
0819名無しさん@お腹いっぱい。2014/06/10(火) 10:44:55.16
>>816
sed -e 's/\([$`]\)/\\\\\1/g' -e 's!\(([0-9][0-9]*)\)!(\$((\1/5)))!g' -e 's/^/"/'
-e 's/$/"/'|while read l; do eval echo "$l";done

>>818
$((expr))のこといってるならposix shellだよ
http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html
08208182014/06/10(火) 12:11:58.44
>>819
Solaris8 や HP-UX10 あたりの sh は演算置換できなかった覚えがあるんだけど、
便利になったなあ…
0821名無しさん@お腹いっぱい。2014/06/10(火) 12:15:49.48
何に準拠してるかではなく、スクリプトを書かせてる発想が大事であって、自分の環境で動かなかったら書き換えればいいだけ。
08228102014/06/10(火) 12:29:01.86
おお……すごいな
自分の発想が貧困だったことを思い知らされる
ありがとう
0823名無しさん@お腹いっぱい。2014/06/10(火) 14:09:06.28
eval使うほどの案件じゃない
0824名無しさん@お腹いっぱい。2014/06/10(火) 14:28:20.32
威張るな
0825名無しさん@お腹いっぱい。2014/06/10(火) 14:32:11.80
eval使わずに、$((xx)) も使わずに:

while IFS='()' read a b; do
if [ "$b" ]; then
echo "$a(`expr $b / 5`)"
else
echo "$a"
fi
done
0826名無しさん@お腹いっぱい。2014/06/10(火) 14:53:54.80
>>825
AA(55) や AA(20) の行末に何か文字が入ってしまうとエラーになる
>>819 なら "AA(20) BB(100) CC(65)" とかになっていてもOK
0827名無しさん@お腹いっぱい。2014/06/10(火) 14:56:24.36
>>826
そんなことわかった上で、要求仕様だけ満たす最小限で書いているのだよ。
0828名無しさん@お腹いっぱい。2014/06/10(火) 14:58:01.83
悔しいのぅ〜悔しいのぅ〜
0829名無しさん@お腹いっぱい。2014/06/10(火) 15:05:19.71
>>826
>>819 は入力に " が1個とか(奇数個)含まれてるとエラーになるぞ。
>>825 ならOK
0830名無しさん@お腹いっぱい。2014/06/10(火) 15:08:54.44
ほらよ
sed -e 's/\(["$`]\)/\\\\\1/g' -e 's!\(([0-9][0-9]*)\)!(\$((\1/5)))!g' -e 's/^/"/'
-e 's/$/"/'|while read l; do eval echo "$l";done
0831名無しさん@お腹いっぱい。2014/06/10(火) 15:12:08.71
う〜〜ん、A("55") だったりすると >>825 はエラーになるね
>>819 はそのまま出力される…仕様外だからしょうがないのかもしれない
0832名無しさん@お腹いっぱい。2014/06/10(火) 15:13:25.19
>>830
お見事
0833名無しさん@お腹いっぱい。2014/06/10(火) 15:13:41.98
>>830
入力行中に半角¥があると消えちゃうねw
0834名無しさん@お腹いっぱい。2014/06/10(火) 15:15:51.89
素直にこうじゃいかんの?

while read line; do
case "$line" in
AA\(*\)) echo AA\(`expr "$line" : 'AA(\(.*\))' / 5`\) ;;
*) echo "$line" ;;
esac
done
0835名無しさん@お腹いっぱい。2014/06/10(火) 15:18:07.96
>>834
AA() の AAは固定という解釈か? BB() とかないの?
0836名無しさん@お腹いっぱい。2014/06/10(火) 15:20:27.44
>>835
対応は簡単だけど、要求使用外だから別料金
0837名無しさん@お腹いっぱい。2014/06/10(火) 15:25:43.37
\は厄介だな

IFS=
sed -e 's/\\/!!!rougue_monster!!!/g' -e 's/\(["$`]\)/\\\\\1/g' -e 's!\(([0-9][0-9]*)\)!(\$((\1/5)))!g' -e 's/^/"/' -e 's/$/"/' |while read l; do eval echo "$l";done | sed -e 's/!!!rougue_monster!!!/\\/g'
0838名無しさん@お腹いっぱい。2014/06/10(火) 15:28:31.93
>>833
>>825 でも "\AA(55)" とかのバックスラッシュは消えちゃうんじゃない
まぁ、バックスラッシュを保存したかったら入力側で "\\\AA(55)" とかして
おけば良いような
0839名無しさん@お腹いっぱい。2014/06/10(火) 15:33:12.06
>>838
>>825 は read を read -r にすればバックスラッシュ保存されるよ。
0840名無しさん@お腹いっぱい。2014/06/10(火) 15:36:44.33
そうすると今度は "AA(\55)" が…いや、仕様外だな
0841白バラ十字軍2014/06/10(火) 15:41:26.82
今では殺人事件凶悪事件が起こると創価員かというぐらい
ネットではささやかれる時代になりました。刑務所受刑者の33%は創価員という事実は有名な話ですが、以下を見れば納得ができます

創価員が裁かれる    判決の際 法廷にこだまする「 池 田 先 生 万 歳 !」
◎以下これ以外にまだまだ創価員の犯罪多数あり、書類送検されていないだけであなたの街でも多数すさまじい事件の数が
発生しましたし、まだまだ毎日のように創価員による凶悪事件は発生しているのです!
しかもこれ以外にもTVでも報道された凶悪事件多数あり!。あなたの周りにも潜んでいる。
危険です。危機的状況です。酒鬼薔薇だけではありません。実にたくさんいるのです
あなたの街でも善良な人間のように取り繕い潜んでいるのです。

●宅間守(在日)→大阪 附属池田小学校児童殺傷 創価学会員。大量殺人犯 。8人殺害 15人が重軽傷。悪徳 朝鮮人部落出身。
(悪徳カルト)両親も創価学会員。獄中結婚したが相手の女も創価員。さすが創価員は悪徳な者を好む。あえて結婚する
とは殺人破壊者を賛美、美化、擁護する行為 2004年死刑執行 獄中結婚した女は慰謝料損害賠償払ったのか?被害者に詫びたのか?
宅間は被害者に詫びていない。つまり・・・判決の際 法廷にこだまする「 池 田 先 生 万 歳 !」ということ
日本の犯罪史上、稀に見る大事件
●畠山鈴香 (在日)→秋田県児童連続殺害事件 創価学会員。悪徳。(悪徳カルト)
●斉藤勇太 →JR取手駅前バス無差別殺傷事件 創価学会員。悪徳。(悪徳カルト)
●酒鬼薔薇聖斗→ 東慎一郎(在日)神戸の首切り魔で酒鬼薔薇聖斗 創価学会員。神戸の首切り魔。生首を校門に飾る。悪徳2人殺害。
元在日朝鮮人。両親も創価学会員(悪徳カルト)
●福田孝行(在日)→山口県母子殺害 殺害後屍姦、乳児も殺害 創価学会員。悪徳(悪徳カルト)
●阿部隆 →長野母子バラバラ殺人事件(平成元年)船橋市幼児バラバラ殺人事件 千葉県船橋市の熱心な創価学会員・A・A子さんと長男
のHちゃんが、同じく学会員である夫のA・Tに殺された。動機は生活苦。バラバラにされた死体が聖教新聞に包まれ、長野県の山中に捨
てられていた 悪徳(悪徳カルト)
0842名無しさん@お腹いっぱい。2014/06/10(火) 17:33:57.23
お前らこういう問題好きすぎだろww
分かるけどさ
0843名無しさん@お腹いっぱい。2014/06/10(火) 18:07:53.19
そういやオライリーから「Data Science at the Command Line」って本が
8月に出版されるそうな

http://www.oreilly.com/pub/e/3115
https://twitter.com/jeroenhjanssens/status/474948853284999168/photo/1
0844名無しさん@お腹いっぱい。2014/06/10(火) 18:10:14.13
>>843
あくまでコマンドラインで操作するってだけで
シェルスクリプト関係なさそう
つーかこういうツールって大抵CLIだからわざわざタイトルに書かなくてもいいような
0845名無しさん@お腹いっぱい。2014/06/10(火) 20:07:24.97
素直にperlでいいじゃんと思った俺は負け組か。。。
0846名無しさん@お腹いっぱい。2014/06/10(火) 23:27:05.36
>>845
しかも Perl のワンライナーの方が速いっていう
0847名無しさん@お腹いっぱい。2014/06/10(火) 23:31:05.39
せやろか?
0848名無しさん@お腹いっぱい。2014/06/11(水) 00:19:36.58
速さより早さ。
0849名無しさん@お腹いっぱい。2014/06/11(水) 01:24:39.28
早さより可読性
っていうのはスレ違いかな
0850名無しさん@お腹いっぱい。2014/06/11(水) 01:57:36.02
>>844
関係なさそうどころか、普通にIPythonとR使いますって書いてある
0851名無しさん@お腹いっぱい。2014/06/11(水) 02:18:03.96
男は度胸!何でもためしてみるのさ
0852名無しさん@お腹いっぱい。2014/06/13(金) 01:19:21.92
問:下記のようなテキストファイルがある
>__BEGIN__
>NAME:xxx
>...
>STYLE:yyy
>...
>__END__
>__BEGIN__
>NAME:aaa
>...
>STYLE:bbb
>...
>STYLE:ccc
>...
>__END__
>__BEGIN__
>..
BEGIN-END間を1ブロックとして、1ブロック内にNAMEが1つ、STYLEが1つ以上。
1ブロックの情報を「NAME:STYLE,STYLE,,,,」というように1行にまとめて整形するようなスクリプトを考える。
全行数が数百万行、ブロック数は数千ほどあるとして、現実的実行時間で収まる事。
__BEGIN__は最初の1つ以外はすべて__END__の直後にあるとし、NAMEは__BEGIN__の直後に出現、STYLEの位置はブロック毎に異なるとする。
暇潰しにどうぞ
0853名無しさん@お腹いっぱい。2014/06/13(金) 02:05:55.88
>>852
sedでいらない行消してNで適当にくっつけて改行を,に変えてちょっと整形すればいいんじゃね?
0854名無しさん@お腹いっぱい。2014/06/13(金) 08:51:41.06
BEGIN{FS=":"}
$1=="NAME"{n=$2}
$1=="STYLE"{s=s$2","}
$0=="__END__"{sub(/,$/,s);print n":"s;s=""}
0855名無しさん@お腹いっぱい。2014/06/13(金) 11:30:59.14
awkすげぇな……
0856名無しさん@お腹いっぱい。2014/06/13(金) 14:16:24.79
うーん、もっとコンパクトに書きたい……
egrep '^(NAME:.*|STYLE:.*|__END__)$' | sed -E -e :begin -e N -e 's/\n__END__$/&/' -e tend -e bbegin -e :end -e 's/^NAME://' -e 's/\nSTYLE:/:/' -e 's/\nSTYLE:/,/g' -e 's/\n__END__$//'
0857名無しさん@お腹いっぱい。2014/06/13(金) 15:32:01.10
egrepなくして冗長も減らしてみた
sed -e 's/^__BEGIN__$//' -e :B -e N -e 's/\nNAME://' -e 's/\nSTYLE:/,/' -e tB -e 's/\n__END__$//' -e tE -e 's/\n.*//' -e bB -e :E -e 's/,/:/'
0858名無しさん@お腹いっぱい。2014/06/13(金) 17:39:23.28
856だとメモリ詰め込みまくりでなんだかなぁって思ったけど、
857だとうまくいきそうだな
実行時間どんなもんやろか
0859名無しさん@お腹いっぱい。2014/06/15(日) 02:37:40.63
>>857もすごいが、個人的には>>854が好きだな
必要最低限のことしかしてない感じと可読性の高さが気に入った
何より仕様変更に強そう
0860名無しさん@お腹いっぱい。2014/06/15(日) 03:32:55.22
alias でもなく pushd/popd でもなくて、もっと簡単にディレクトリを登録して呼び出せるような方法ってないですかね?ブックマーク(?)みたいに
ただし bash 限定で
0861名無しさん@お腹いっぱい。2014/06/15(日) 04:10:21.09
symlinkでいくね?
0862名無しさん@お腹いっぱい。2014/06/15(日) 04:23:17.30
aliasで十分すぎるぐらい簡単な気がするんだが……
0863名無しさん@お腹いっぱい。2014/06/15(日) 09:26:22.48
>>860
Apparix とか
http://micans.org/apparix/
0864名無しさん@お腹いっぱい。2014/06/15(日) 18:39:14.24
シェル勉強中だがesacみて吐き気がした
fiはfinish ifか何かの遊び心としてもこれはちょっと……
0865名無しさん@お腹いっぱい。2014/06/15(日) 18:42:20.05
この程度で吐き気してたら先が思いやられるね

for … rof
while … elihw

とかも出てくるから慣れようねw
0866名無しさん@お腹いっぱい。2014/06/15(日) 18:50:25.87
あ.そう
0867名無しさん@お腹いっぱい。2014/06/15(日) 20:45:19.15
od が無ければ、algol にならって、do list; od だったのだろうか。
0868名無しさん@お腹いっぱい。2014/06/15(日) 21:41:52.54
if .. fi や case ... esac のようなのと
do .. done がごっちゃになってるのは美しくない!
みたいなこと言ってる人見たことあるけど割とどーでもいいな
0869名無しさん@お腹いっぱい。2014/06/15(日) 22:25:33.36
do .. done系は全部ループやしそれ以外は反転ってルールにしたんだろうね
0870名無しさん@お腹いっぱい。2014/06/15(日) 23:52:31.71
esacは確かにキモいがだからと言ってendcaseとかやられてもうーん
0871名無しさん@お腹いっぱい。2014/06/16(月) 01:57:14.37
シェルスクリプトに何を求めて勉強してんだ。
0872名無しさん@お腹いっぱい。2014/06/16(月) 12:54:05.03
esacが嫌な人はCシェル使えばいいと思うよ
0873名無しさん@お腹いっぱい。2014/06/17(火) 12:58:22.00
>>854のawk
最後のsub(/,$/,s);ってsub(/,$/,,s);の書き間違いかなと思うんだが
0874名無しさん@お腹いっぱい。2014/06/18(水) 22:51:23.12
sub(/,$/,,s)じゃなくてsub(/,$/,"",s)か
勘違いだったらハズカシィ
0875名無しさん@お腹いっぱい。2014/06/19(木) 15:04:38.00
セミコロンで区切るのだってキモいだろ
esacとたいして変わらん
0876名無しさん@お腹いっぱい。2014/06/19(木) 15:38:27.70
C言語から学び始めた俺にとっては至極自然
とはいえサブシェルを{}で開くと違和感バリバリだが
0877名無しさん@お腹いっぱい。2014/06/19(木) 15:41:14.67
>>876
サブシェルは () だぞ。{ ;} は同じシェルの単なるグルーピング。

キモいと言ってるのはcase(switch)文をbreakする仕組み自体のことじゃなく、
そのbreakを ;; という記号で表すことについて言ってるんだけど。
0878名無しさん@お腹いっぱい。2014/06/19(木) 15:43:46.40
改行の代わりにコマンドを ; で区切る話じゃないのか?
08798762014/06/19(木) 15:50:23.77
すまん>>878のつもりでセミコロンの話解釈してたけどcaseの中身の話か
確かにありゃキモいな
そしてサブシェル勘違いorz
0880名無しさん@お腹いっぱい。2014/06/19(木) 16:26:09.26
findの-execのセミコロン「ゆ…許された」
0881名無しさん@お腹いっぱい。2014/06/19(木) 16:29:05.11
esacも;;も気にならんけど、(と対称にならないcaseのパターン指定はダメだ。
0882名無しさん@お腹いっぱい。2014/06/19(木) 16:37:30.82
bashだと、
case $var in (hoge) echo hoge;; esac
とか書けるんだ。
0883名無しさん@お腹いっぱい。2014/06/24(火) 02:53:56.45
なんか書き込みがずっとないからなんか書いてみよう
--
あるファイルに、
1
2
3..
という具合に、改行区切りで昇順に数字が書き込まれているとする
しかし、ファイル末尾の数値と行数が合わない為、どこかで数値が欠けている、もしくは重複していると予想される
ファイル内部は昇順ソート済みとして、重複・欠損している数値を洗い出す効率の良い仕組みを考える
shでもperlでもなんでもどうぞ
0884名無しさん@お腹いっぱい。2014/06/24(火) 06:25:38.91
awk 'NR!=$1{print NR}'
0885名無しさん@お腹いっぱい。2014/06/24(火) 06:58:51.21
i=1; while read line; do [ "$line" != $i ] && echo $i; i=`expr $i + 1`; done
0886名無しさん@お腹いっぱい。2014/06/24(火) 07:07:29.80
for((i=1; ;i++)){ read l||break;case $l in $i);;*)echo $i;;esac;}
0887名無しさん@お腹いっぱい。2014/06/24(火) 07:24:52.17
exec 3<&amp;0;yes ''|cat -n|while read f <&amp;3;do read i;[ "$f" != $i ]&amp;&amp;echo $i;done
0888名無しさん@お腹いっぱい。2014/06/24(火) 08:29:05.51
cat -n|while read a b; do case $b in $a);;*)echo $a;;esac;done
0889名無しさん@お腹いっぱい。2014/06/24(火) 09:28:26.18
遅レスだが、>>860については、俺はシェル変数使ってるな。
rcファイルでd=/path/nameとしておいて ls $d とか。
ホーム直下に一文字シンボリックリンク作るより文字数は少なくて済む。
0890名無しさん@お腹いっぱい。2014/06/24(火) 13:20:13.16
ファイル名をnumとして
diff -y --supress-common-lines <(seq 1 `tail -n1 num`) num
0891名無しさん@お腹いっぱい。2014/06/24(火) 13:39:07.32
他のがぱっと分からんけど、>>884って1回ズレたとこ見つけたらそれ以降全部吐かない?
えらい邪魔なような
0892名無しさん@お腹いっぱい。2014/06/24(火) 15:02:19.92
目的が差異の確認だしdiffが一番スマートな印象だなぁ…出力形式も変更が効くし
■ このスレッドは過去ログ倉庫に格納されています