シェルスクリプト総合 その2
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
2005/04/17(日) 00:17:17まずは注意点、リンク、地鎮祭など(>>1-10くらい)をご覧ください。
□前スレや過去スレ:
シェルスクリプト総合 その1
http://pc8.2ch.net/test/read.cgi/unix/1101820646/
☆シェルスクリプトを勉強するにあたって☆
http://pc5.2ch.net/test/read.cgi/unix/989659936/
便利なシェルスクリプト見せろ
http://pc5.2ch.net/test/read.cgi/unix/996949546/
【貝】第1回シェル講座【殻】
http://fun.kz/test/read.cgi/unix/1016372780/
□関連スレ:
sed
http://pc8.2ch.net/test/read.cgi/unix/1085730992/
おまえら! shell は何を使っているんですか?
http://pc5.2ch.net/test/read.cgi/unix/1012330865/
Eshell の使い方とか設定とか【Emacs Shell、Lisp】
http://pc8.2ch.net/test/read.cgi/unix/1102921590/
□他板の関連スレ:
Macでシェルスクリプト総合 Part 1
http://pc7.2ch.net/test/read.cgi/mac/1105074933/
【Shell】どのシェル使ってる?【Script】
http://pc8.2ch.net/test/read.cgi/linux/1067330754/
0767名無しさん@お腹いっぱい。
2005/07/28(木) 10:05:15ファイル名にnull文字は使えねーよ。
だからxargs -0が最もマトモな解決法なのだが、
Solarisとかで使えないから問題になってるんだよ。
0768名無しさん@お腹いっぱい。
2005/07/28(木) 10:10:17改行は滅多にないとしても、
ファイル名に ' " \ などが含まれているのは
よくある。
「Don't Cry.mp3」とかね。
xargsが ' " \ を特殊文字扱いするのが問題になる。
0769名無しさん@お腹いっぱい。
2005/07/28(木) 11:46:07xargsが単純に改行をセパレータとして扱うような
プログラムだったなら、はるかにマシだっただろうね
0770名無しさん@お腹いっぱい。
2005/07/28(木) 14:45:330771名無しさん@お腹いっぱい。
2005/07/28(木) 14:50:42あっ、そんな記憶ある。
NEWS-OS 4 (3かな?) じゃないかな。
0772名無しさん@お腹いっぱい。
2005/07/28(木) 18:31:44/usr/5binにすらない。
(/usr/5bin/cpioとかならある・・ちなみにunameもない・・)
まあ、xargsは元SysV系ということで、
「使わなくても済むはずのコマンド」の扱いだったのだろう。
0773761
2005/07/28(木) 19:56:55761 で -L 1 を付けたのは、この例だと 1 行ずつ処理しないと
表示が分かりづらいからです。説明が悪かったですね。
改行の入ったファイル名は (find 的に) 無理ですが、
何とかすれば何とかなります。
$ touch "sp ace"
$ touch "single'quote"
$ touch 'double"quote'
$ touch 'back\slash'
$ find . -type f | sed -e 's/\\/\\\\/g' -e 's/"/\\"/g' -e 's/\(.*\)/"\1"/' | xargs /bin/sh -c 'echo "[$1][$2][$3][$4]"' --
[./sp ace][./single'quote][./double"quote][./back\slash]
ま、そこまでして使いたいかと言えば No ですが。
0774名無しさん@お腹いっぱい。
2005/07/28(木) 20:27:47たしかにマシンのほとんどはNEWSだった。記憶があやふやだったので
local をつけたけど、やはり/usr/X11/binだったのかな
0775771
2005/07/29(金) 00:50:15記憶違いだったようで、スミマセン。
ひょっとしたら、初心者の私が
「ファイル名が x で始まるのに、どうして/usr/bin/X11にないんだ」
(笑わないでオクレ!)
と思ったのが記憶に残っていたのかもしない。
あっ、 NEWS-OSの X 関係は /usr/bin|lib/X11というのも違うかも。
近くの席にはSUN 3 が有ったなぁ。
0776名無しさん@お腹いっぱい。
2005/07/29(金) 03:39:56xargs はあった方が良いと思うんだが。
これの代わりをするには、たくさんコマンド組み合わせてやらないといかん希ガス
0777名無しさん@お腹いっぱい。
2005/07/29(金) 08:14:57あったという記憶は同じようだけど。NEWSのキーボードのタッチは好きだった。
「~」の位置のせいで痛いミスをしたことがあったが…
xargsはコマンドライン以外で使ったことがないかもしれん。
0778名無しさん@お腹いっぱい。
2005/07/29(金) 08:19:04xargsは実行時効率とタイプ量減らすためって気がする
たんに機能の話だけで言えば
cmdA | xargs cmdB
は
cmdA | while read i; do cmdB $i; done
でいいし(後者は効率が悪いがIFSで適切なデリミタを設定することもできる)
0779名無しさん@お腹いっぱい。
2005/07/29(金) 08:28:340780名無しさん@お腹いっぱい。
2005/07/29(金) 10:04:04随分昔の話なので、私の記憶が間違っていたのかと思いました。
>777
コマンドライン以外で使うxargs って、スクリプトの中に書くという事ですよね。
それとも、使いやすいGUIが有るとか? (そんなGUI 想像つかない)
# スレ違いなんで、このくらいにしておきます。 orz
0781名無しさん@お腹いっぱい。
2005/07/29(金) 18:23:59xarg はいらないの?
0782名無しさん@お腹いっぱい。
2005/07/29(金) 18:26:250783名無しさん@お腹いっぱい。
2005/07/29(金) 18:37:570784名無しさん@お腹いっぱい。
2005/07/30(土) 09:24:10xargs -i cmd {} でほぼ解決できる。
パフォーマンスは知らん。
0785名無しさん@お腹いっぱい。
2005/07/30(土) 10:19:58だからぁー、-iオプション付けると
-l 1も暗黙に付いちゃうから、xargs使う意味がなくなるんだよ。
解決するのはスペースを区切り文字とみなさないことだけであって、
\ とか ' とか " の問題はそのまま未解決。
0786名無しさん@お腹いっぱい。
2005/07/30(土) 10:28:10>-l 1も暗黙に付いちゃうから、xargs使う意味がなくなるんだよ。
意味不明。
0787名無しさん@お腹いっぱい。
2005/07/30(土) 11:01:57何を言ってるんだ?w
0788名無しさん@お腹いっぱい。
2005/07/30(土) 14:54:36f1 f2 f3 f4 ->f1.jpg f2.jpg f3.jpg f4.jpg
0789名無しさん@お腹いっぱい。
2005/07/30(土) 15:00:30mv $file $file.jpg
done
0790名無しさん@お腹いっぱい。
2005/07/31(日) 21:14:35rename って言ってるってことはMS-DOSプロンプトなんだろうよ
正解は >>791 よろしく
0791名無しさん@お腹いっぱい。
2005/07/31(日) 21:20:030792名無しさん@お腹いっぱい。
2005/07/31(日) 21:22:190793名無しさん@お腹いっぱい。
2005/07/31(日) 21:37:19ただし一般的ではない。
>>789
はダブルクォート付けていないから、減点だな。
0794名無しさん@お腹いっぱい。
2005/07/31(日) 21:45:25* はまずいだろ
0795名無しさん@お腹いっぱい。
2005/07/31(日) 22:00:170796名無しさん@お腹いっぱい。
2005/08/01(月) 08:28:050797名無しさん@お腹いっぱい。
2005/08/02(火) 12:42:06いいでしょう?
0798名無しさん@お腹いっぱい。
2005/08/02(火) 12:42:330799名無しさん@お腹いっぱい。
2005/08/02(火) 13:38:30tail -r
0800名無しさん@お腹いっぱい。
2005/08/02(火) 23:45:18ひねくれ者め(笑)
0801名無しさん@お腹いっぱい。
2005/08/03(水) 00:25:160802名無しさん@お腹いっぱい。
2005/08/03(水) 00:56:37実際のところ head で実現するのは苦しい気がする。
(head で指定できる行数は限りがあったと思うので。)
てことで
tail -<n> <file_name> > <tmp_file>
comm -23 <file_name> <tmp_file>
rm -f <tmp_file>
かな。
0803名無しさん@お腹いっぱい。
2005/08/03(水) 02:44:090804名無しさん@お腹いっぱい。
2005/08/03(水) 03:14:440805名無しさん@お腹いっぱい。
2005/08/03(水) 03:32:44last=100
rows=`wc -l file | cut -d ' ' -f 1`
head -n `expr $rows - $last` file
とか。
0806名無しさん@お腹いっぱい。
2005/08/03(水) 03:37:55は
wc -l < file
でいいだろ
0807名無しさん@お腹いっぱい。
2005/08/03(水) 07:23:57??
0808名無しさん@お腹いっぱい。
2005/08/03(水) 10:14:37GNU tail では -r はないようなのでかわりに tac を。
0809名無しさん@お腹いっぱい。
2005/08/03(水) 12:55:11あんまり嬉しくないんですよね。
というわけで、こうかなあと。(n=4の場合)
ruby -ne '(q||=[])<<$_;q.size<=4||print(q.shift)' file
0810名無しさん@お腹いっぱい。
2005/08/03(水) 13:07:440811名無しさん@お腹いっぱい。
2005/08/03(水) 17:21:46スクリプトを実行したら
login:
名前を打ち込んで
password:
パスを打ち込む(非表示)
パスはファイルにリダイレクト
っていうのを作りたいんですが。バッシュで。
途中で文字列を入力させるやり方が分かりません。
教えてください。おねがいします。
0812名無しさん@お腹いっぱい。
2005/08/03(水) 17:37:23read -s -p 'password: ' PASS
echo $PASS > file
0813名無しさん@お腹いっぱい。
2005/08/03(水) 20:14:020814名無しさん@お腹いっぱい。
2005/08/04(木) 02:44:04どのようにやればよいでしょうか?
0815名無しさん@お腹いっぱい。
2005/08/04(木) 08:57:48exec perl -pe chomp
0816名無しさん@お腹いっぱい。
2005/08/04(木) 13:31:14知らなかった
0817名無しさん@お腹いっぱい。
2005/08/04(木) 13:39:59上記のようなパイプで繋いだコマンドで、cmd1の終了ステータスを拾いたいのですが、
どうしたらよいのでしょうか?
0818名無しさん@お腹いっぱい。
2005/08/04(木) 14:25:130819名無しさん@お腹いっぱい。
2005/08/04(木) 14:45:120820名無しさん@お腹いっぱい。
2005/08/04(木) 14:55:23echo $?
うーん、美しくない。
0821名無しさん@お腹いっぱい。
2005/08/04(木) 22:10:150822名無しさん@お腹いっぱい。
2005/08/04(木) 23:58:53tr -d '\n'
0823名無しさん@お腹いっぱい。
2005/08/05(金) 00:59:04bash の(たぶん)3.0じゃないと使えないと思うけど、
$ echo $PIPESTATUS[0]
とか、出来る。
ちなみに配列だから、
$ echo ${PIPESTATUS[*]}
で、全部見れる。
あと、ちょっと違うけど、
$ set -o pipefail
とかもある。
0824823
2005/08/05(金) 01:01:30pipefailが、3.0からだった。
0825名無しさん@お腹いっぱい。
2005/08/05(金) 02:17:49どう書けばいいですか?所有者ももそれぞれのユーザに設定できますか?
0826名無しさん@お腹いっぱい。
2005/08/05(金) 02:32:28/etc/skel に置いとけ
0827名無しさん@お腹いっぱい。
2005/08/05(金) 02:35:580828名無しさん@お腹いっぱい。
2005/08/05(金) 02:54:40そんなぁ・・・
そこをなんとか・・・
0829名無しさん@お腹いっぱい。
2005/08/05(金) 03:15:53だだこねる相手はママだけにしとけよ。
次の方、どうぞ↓
0830名無しさん@お腹いっぱい。
2005/08/05(金) 07:43:520831名無しさん@お腹いっぱい。
2005/08/05(金) 07:47:09シス管が居て、迷惑してるのですが、
これを拒否するにはどうしたらいいでしょうか?
ちなみに、root権限で上書きコピーしてくるため、
一般ユーザーのパーミッション設定では防げません。
あと、.emacsだけじゃなく、$HOME/.profile
$HOME/.xinitrcとかもコピーで潰されるので大迷惑です。
0832名無しさん@お腹いっぱい。
2005/08/05(金) 08:17:230833名無しさん@お腹いっぱい。
2005/08/05(金) 08:34:38#!/bin/sh
cat <<EOF | mail root
From: $USER
あなたのホスト管理はクソです。
いますぐ.emacsをroot権限で上書きするというアホな行為をやめてください。
EOF
0834名無しさん@お腹いっぱい。
2005/08/05(金) 08:53:27自分の.emacs を、.my-emacs とかにかえて、
シェルのalias を使って、
alias emacs="emacs -q -l .my-emacs"
とかしとく。
.profile の方も、同じような考え方で、
bash --norc --noprofile の後、自分のprofileを読み込むようなscriptを書いといて、
毎回、loginし直す。(面倒だけど)
zsh 、ksh、tcsh等、対話的に使うshellを他のにするとかでもいいんじゃん?
.xinitrcは、
export XINITRC=$HOME/.my-xinitrc
を設定しといて、startx。
で、どうよ。
>>833 みたく、管理者に一言いうのが早いかもしんないけど。
0835名無しさん@お腹いっぱい。
2005/08/05(金) 11:18:520836名無しさん@お腹いっぱい。
2005/08/05(金) 11:36:49ログインシェルは何か。自分の権限でcronやchshは使えるか。
などによっていろいろと対抗手段は考えられるけど、情報不足。
0837名無しさん@お腹いっぱい。
2005/08/05(金) 11:41:59こんなに釣りにつき合ってくれてありがとう。
0838名無しさん@お腹いっぱい。
2005/08/05(金) 11:48:340839名無しさん@お腹いっぱい。
2005/08/05(金) 13:03:52∧_(Д`; )
( ・∀・)玉 つ
(っ ≡つて ヽ チーン!
して_)_ノw (_)
玉を砕くと書いて「玉砕」と言う。
0840名無しさん@お腹いっぱい。
2005/08/05(金) 13:12:340841名無しさん@お腹いっぱい。
2005/08/05(金) 13:32:33ふつー、rm -f してから cpするだろうから効果なし。
0842名無しさん@お腹いっぱい。
2005/08/05(金) 16:40:350843名無しさん@お腹いっぱい。
2005/08/05(金) 17:32:09の3の書き込みなんですが、意味は分かるんですが
なぜ {, という書き方なんでしょうか。
そのままぐぐってみてもヒットしないので
展開の書式を解説しているサイトを教えてください。
0844名無しさん@お腹いっぱい。
2005/08/05(金) 17:35:5513.6 Brace Expansion
====================
A string of the form `FOO{XX,YY,ZZ}BAR' is expanded to the individual
words `FOOXXBAR', `FOOYYBAR' and `FOOZZBAR'. Left-to-right order is
preserved. This construct may be nested. Commas may be quoted in
order to include them literally in a word.
0845名無しさん@お腹いっぱい。
2005/08/05(金) 17:42:34>>843 は、空文字列のカンマに付いての質問と思われ。
ブレース展開自体の質問じゃないよ。
0846名無しさん@お腹いっぱい。
2005/08/05(金) 17:42:54(゚Д゚)ハァ?
0847名無しさん@お腹いっぱい。
2005/08/05(金) 17:43:46自分の理解力不足を棚にあげて、人を批判とはおめでたい人ですね. :-)
0848名無しさん@お腹いっぱい。
2005/08/05(金) 17:44:25> ブレース展開自体の質問じゃないよ。
>>843
> 展開の書式を解説しているサイトを教えてください。
0849名無しさん@お腹いっぱい。
2005/08/05(金) 17:44:57英語が読めないなら、エキサイト翻訳使えよ。
0850名無しさん@お腹いっぱい。
2005/08/05(金) 17:52:13ネスティング可能なことと、
カンマ自体を普通の文字として使うならクォートしろということだけ。
元質問のコマンドラインでは左から右への順序は関係ないし、
空文字列のカンマも許されることは >>844 には書かれていない。
なので、 >>844 は早とちりの外し回答だと思う。
0851名無しさん@お腹いっぱい。
2005/08/05(金) 18:09:45百年謝罪しろ!!!!!!!!!!!!!!!!!!!!!!!!!!
0852名無しさん@お腹いっぱい。
2005/08/05(金) 20:29:30> 空文字列のカンマも許されることは >>844 には書かれていない。
禁止されていないということは許されているということだろ。
0853名無しさん@お腹いっぱい。
2005/08/05(金) 20:38:18元質問は「 {, とは何か?」と聞いているのだから、
「それはブレース展開の最初の文字列が空文字列になっているものだ」
と答えるのが的確。
>>850 はマトはずれ。
0855名無しさん@お腹いっぱい。
2005/08/05(金) 21:11:43今/home/.vimrcがあるとして、ユーザディレクトリにそれぞれコピーするには
どう書けばいいですか?所有者ももそれぞれのユーザに設定できますか?
0856名無しさん@お腹いっぱい。
2005/08/05(金) 21:12:300857名無しさん@お腹いっぱい。
2005/08/05(金) 21:19:51シス管が居て、迷惑してるのですが、
これを拒否するにはどうしたらいいでしょうか?
ちなみに、root権限で上書きコピーしてくるため、
一般ユーザーのパーミッション設定では防げません。
あと、.vimrcだけじゃなく、$HOME/.xsessionや
$HOME/.cannaとかもコピーで潰されるので大迷惑です。
0858名無しさん@お腹いっぱい。
2005/08/05(金) 21:24:000859名無しさん@お腹いっぱい。
2005/08/05(金) 21:26:37コミュニケーション能力を磨くといいよ。
0860名無しさん@お腹いっぱい。
2005/08/05(金) 21:34:21コミュニケーション能力じゃなくて、
技術的に回避する方法はありませんか?
上司に言っても、
「シス管は彼に任せているから、彼の方針に従ってくれ」
の一点張りで話が進みません。
0861名無しさん@お腹いっぱい。
2005/08/05(金) 21:39:23> >>859
> 技術的に回避する方法はありませんか?
あるけど、
> 「シス管は彼に任せているから、彼の方針に従ってくれ」
その彼とコミニュケーションはとったの?
0862名無しさん@お腹いっぱい。
2005/08/05(金) 21:45:480863名無しさん@お腹いっぱい。
2005/08/05(金) 21:46:34だれも君がどう感じたかなんて聞いていないよ。
0864名無しさん@お腹いっぱい。
2005/08/05(金) 21:52:54もちろん、とったよ。
「これはシステム管理上必要なことだから」
で話は進まず。
0865名無しさん@お腹いっぱい。
2005/08/05(金) 21:56:36>>861
$HOME/.xsession の場合は回避するの難しくないか?
0866名無しさん@お腹いっぱい。
2005/08/05(金) 22:04:22,. '´ _ -−ニ二二`ヽ、
/ / _,.−'⌒ヽ,ノ``'ミ,、
,.' / / ,,イ゙\ /入、ヾ,
. / / // -‐''"_ ヽ l l′/`_''l}
' / ,.イii/ /∠´ `ヾ' l lレ''´ ヾ
/ ,.' ii/u i{,_,, ゚ }! l li{,_,. ゚ }
. / /ii i/u uヾく,_,ノ′ l lゞi-rイ
,' /-、 i| u ' ' ` ,__〉〉 |
. /l 「ヾ'i| ,.r‐ `'U'U_,ィ}|
/ | ー}.l| /,r 'T"丁 ̄| ̄ | l|'|
}i iト、}( l! ,イ |__, ⊥ _|__,l|.ト、
`i iiiハ `| i l_/ _,ノノ|| \
. }iij. |. l |Y/ ‐┴''" ||\ \
゙l! | l|. 仁 _,__ || \ \
/ | |l lニレ'´ `ヾ'、 || \ \
/ |. |ヽ 「]、 ヾ>、|| \
/ .| |. ヽ`「ヽ }H|\
| | ヽ`「ヽ、、,__,,ノj‐|| ` ー─
u | | \`'〔`'T''''''T´ ,ノ|
| | \ ` ̄ ̄ ̄ /
| | `−──‐′
■ このスレッドは過去ログ倉庫に格納されています