シェルスクリプト総合 その8
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001名無しさん@お腹いっぱい。
2007/02/15(木) 14:28:44スクリプトのお勉強・自慢・腕試しなどにどうぞ。
まずは注意点、リンク、地鎮祭など(>>1-6くらい)をご覧ください。
□お約束
・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。
bash/zsh/ksh/ashなどに依存する場合は明示しましょう。
Linuxユーザは/bin/shの正体がbashなので特に注意。
・csh/tcshのシェルスクリプトは推奨されません。
(理由は「csh-whynot」でググれ)
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
manや参考リンクを見ましょう。
aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルスクリプトのことをシェルってゆーな
・シェルで使えるワイルドカード等は正規表現ではありません。
正規表現の話題はスレ違い(正規表現スレへ)
□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
RubyやPerlの方が適した仕事には素直にそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。
前スレ
シェルスクリプト総合 その7
http://pc10.2ch.net/test/read.cgi/unix/1157601611/
0002名無しさん@お腹いっぱい。
2007/02/15(木) 14:32:25シェルスクリプト総合 その7
http://pc10.2ch.net/test/read.cgi/unix/1157601611/
シェルスクリプト総合 その6
http://pc10.2ch.net/test/read.cgi/unix/1143302182/
シェルスクリプト総合 その5
http://pc10.2ch.net/test/read.cgi/unix/1137801629/
シェルスクリプト総合 その4
http://pc10.2ch.net/test/read.cgi/unix/1131026501/
シェルスクリプト総合 その3
http://pc10.2ch.net/test/read.cgi/unix/1124889646/
シェルスクリプト総合 その2
http://pc10.2ch.net/test/read.cgi/unix/1113664637/
シェルスクリプト総合 その1
http://pc10.2ch.net/test/read.cgi/unix/1101820646/
□関連スレ:
sed
http://pc10.2ch.net/test/read.cgi/unix/1085730992/
正規表現
http://pc10.2ch.net/test/read.cgi/unix/1039165754/
おまえら! shell は何を使っているんですか?
http://pc10.2ch.net/test/read.cgi/unix/1012330865/
Eshell の使い方とか設定とか【Emacs Shell、Lisp】
http://pc10.2ch.net/test/read.cgi/unix/1102921590/
0003名無しさん@お腹いっぱい。
2007/02/15(木) 14:34:55「誰にでも」シリーズ
ttp://kanji.zinbun.kyoto-u.ac.jp/~yasuoka/publications/dareUni/
/bin/shプログラミング入門
ttp://freebooks.info.nara-k.ac.jp/archive/ShellProgramming/
シェルを使おう - 導入からプログラミングまで -
ttp://www.netfort.gr.jp/~tomokuni/lms/shell/text/
□入門者向け書籍:
プロフェショナルシェルプログラミング
http://www.amazon.co.jp/exec/obidos/ASIN/4756116329/
入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界
http://www.amazon.co.jp/exec/obidos/ASIN/4797321946/
UNIXシェルプログラミング徹底解説
http://www.amazon.co.jp/exec/obidos/ASIN/4822280489/
入門Kornシェル
http://www.amazon.co.jp/exec/obidos/ASIN/4873110149/
入門bash
http://www.amazon.co.jp/exec/obidos/ASIN/4900900788/
□参考リンク:
UNIXの部屋 (沢山のコマンドの簡単な紹介など)
http://x68000.q-e-d.net/~68user/unix/
POSIX: Shell & Utilities (標準規格)
http://www.opengroup.org/onlinepubs/009695399/utilities/contents.html
0004名無しさん@お腹いっぱい。
2007/02/15(木) 14:35:28(2004/03) UNIXシェルスクリプトハンドブック 関根 達夫 (著)
http://amazon.co.jp/o/ASIN/4797326522/
(2004/10) UNIXシェルスクリプト逆引き大全333の極意 中橋 一朗 (著)
http://amazon.co.jp/o/ASIN/4798008842/
(2004/11) 仕事に使えるLinuxシェルスクリプト 千葉 真人 (著)
http://amazon.co.jp/o/ASIN/4822282090/
(2004/12) UNIXシェルスクリプトサンプルブック デイブ・テイラー (著)
http://amazon.co.jp/o/ASIN/4797327286/
(2005/02) シェルスクリプト基本リファレンス 山森 丈範 (著)
http://amazon.co.jp/o/ASIN/4774122610/
(2005/04) LinuxWorldスクリプト 月刊リナックス・ワールド総集編 月刊LinuxWorld特別 (著)
http://amazon.co.jp/o/ASIN/4872802349/
(2005/05) UNIXシェルスクリプトコマンドブック 山下 哲典 (著)
http://amazon.co.jp/o/ASIN/4797330635/
(2005/05) わかる&使える UNIX基礎講座 シェルスクリプト編 中井 獏 (著)
http://amazon.co.jp/o/ASIN/4774123625/
0005名無しさん@お腹いっぱい。
2007/02/15(木) 14:38:51(2004/03) UNIXシェルスクリプトハンドブック 関根 達夫 (著)
http://amazon.co.jp/o/ASIN/4797326522/
(2004/10) UNIXシェルスクリプト逆引き大全333の極意 中橋 一朗 (著)
http://amazon.co.jp/o/ASIN/4798008842/
(2004/11) 仕事に使えるLinuxシェルスクリプト 千葉 真人 (著)
http://amazon.co.jp/o/ASIN/4822282090/
(2004/12) UNIXシェルスクリプトサンプルブック デイブ・テイラー (著)
http://amazon.co.jp/o/ASIN/4797327286/
(2005/02) シェルスクリプト基本リファレンス 山森 丈範 (著)
http://amazon.co.jp/o/ASIN/4774122610/
(2005/04) LinuxWorldスクリプト 月刊リナックス・ワールド総集編 月刊LinuxWorld特別 (著)
http://amazon.co.jp/o/ASIN/4872802349/
(2005/05) UNIXシェルスクリプトコマンドブック 山下 哲典 (著)
http://amazon.co.jp/o/ASIN/4797330635/
(2005/05) わかる&使える UNIX基礎講座 シェルスクリプト編 中井 獏 (著)
http://amazon.co.jp/o/ASIN/4774123625/
0006名無しさん@お腹いっぱい。
2007/02/15(木) 14:42:04FreeBSD Hypertext Man Pages
http://www.freebsd.org/cgi/man.cgi
Linux JF (Japanese FAQ) Project.
http://www.linux.or.jp/JF/
Unix Programming Frequently Asked Questions 日本語訳
http://www.adl.nii.ac.jp/~moro/unix-programmer/faq-j_toc.html
UNIXプログラミング環境
http://www.amazon.co.jp/exec/obidos/ASIN/4871483517/
□人間初心者へのお願い:
・このスレはシェルスクリプトについてのスレです。
シェルの対話的な利用についての話やスクリプトと関係ないコマンドの
使い方の質問などはスレ違いなので無用に願います。
□シェルスクリプトでよく使うコマンド:
制御・条件判定系: [,test,expr,true,false,yes,getopts
テキスト処理系: cat,awk,sed,tr,sort,uniq,grep,wc,head,tail,cut,paste,comm,join
ファイル検索系: find,xargs
(スペースなどを含むファイル名を正しく処理するため、
findは -print0、xargsは -0オプションを常に付けることを推奨
ただし、Solarisでは未対応。どうするんだろ?)
ディレクトリ系: basename,dirname
出力系: echo,printf
対話コマンド制御系: expect
http/ftpの処理自動化: wget,curl
0007名無しさん@お腹いっぱい。
2007/02/15(木) 15:50:29乙
0008名無しさん@お腹いっぱい。
2007/02/15(木) 16:34:150009名無しさん@お腹いっぱい。
2007/02/15(木) 16:35:58sleep 3
0010名無しさん@お腹いっぱい。
2007/02/15(木) 16:36:490011名無しさん@お腹いっぱい。
2007/02/15(木) 16:41:000013名無しさん@お腹いっぱい。
2007/02/15(木) 19:50:580014名無しさん@お腹いっぱい。
2007/02/15(木) 21:08:02乙
> □最近のシェルスクリプト本(1)
なんかダブってるけど、これの(2)ってのはあるの?
0015名無しさん@お腹いっぱい。
2007/02/15(木) 21:29:48!
ダブリは1のミス
(2)は(まだ)ない
0016名無しさん@お腹いっぱい。
2007/02/15(木) 22:41:49,r'´:.:.:.:.:.:.:.:`.、
,r'/:.:.:.:.:.:.:.:.、ヽ;,:.ヽ
l:.i:.:.i:Mヽヽl:.:i:ヽ;,;,;l
!:l:i.:トl レレVレ!:.:!-、!
ヽトl:f_! '´i_,トl:.:.!_,ノ シエルスクリプトって
l.ヽ '__, l.:.:!/ なんですか?
l:.:| `iー‐'´l:.;!`!
/!;!´ヽ,! -l;!´`ヽ、
,r'´! 人 ,r''ヽ
!::;;l /:::;ヽ ,r';;;r':::ヽ
l:;;/´:::::::::::::;ヽ,r';;/;;:::::::::ヽ
.l;;i:::::::::::::::::::::::::;;;;;;ヽ;::::::::::ヽ
0017名無しさん@お腹いっぱい。
2007/02/15(木) 22:47:320018名無しさん@お腹いっぱい。
2007/02/15(木) 22:54:41私のマシンにはシェルがインストールされていないようです
(メニューにそれらしいものがない)
シェルを追加インストールするには、どこをクイックすればいいですか?
OSはKDE3.5です。
0019名無しさん@お腹いっぱい。
2007/02/15(木) 23:02:42ttp://www.netmeister.org/misc/useless_use.pdf
0020名無しさん@お腹いっぱい。
2007/02/15(木) 23:08:35面白いから順に見たけどこれ長いよ!
0021名無しさん@お腹いっぱい。
2007/02/15(木) 23:09:380022名無しさん@お腹いっぱい。
2007/02/15(木) 23:11:51一応意図した動作をしているのですが、仕様を知らずに使っているため不安です。
この方法の仕様が説明されているサイト等を教えて頂けませんか?man で sh と ftp を見ましたが、該当の記述はありませんでした。
よろしくお願いします。
0023名無しさん@お腹いっぱい。
2007/02/15(木) 23:49:48シェルがないと起動プロセスがまともに進行しないので、
ないってことはあり得ない。
また、KDEはOSではなくて、デスクトップ環境の一種。
あなたが必要なのはKonsoleというKDEのアプリケーションと、
エディタ。
0024名無しさん@お腹いっぱい。
2007/02/15(木) 23:52:190025名無しさん@お腹いっぱい。
2007/02/16(金) 00:42:360026名無しさん@お腹いっぱい。
2007/02/16(金) 00:52:100027名無しさん@お腹いっぱい。
2007/02/16(金) 02:00:22ftp<<EOF
コマンド
EOF
じゃダメなの?
0028名無しさん@お腹いっぱい。
2007/02/16(金) 02:55:270029名無しさん@お腹いっぱい。
2007/02/16(金) 03:56:04catの無駄遣いも可愛いからいいじゃないか。
0030名無しさん@お腹いっぱい。
2007/02/16(金) 07:22:48sh$ set `ls`
sh$ echo "$1"
sh$ echo "$2"
:
bash$ hairetsu=(`ls`)
bash$ echo ${hairetsu[0]}
bash$ echo ${hairetsu[1]}
:
0031名無しさん@お腹いっぱい。
2007/02/16(金) 13:31:320032名無しさん@お腹いっぱい。
2007/02/16(金) 15:03:09cutもたまには使ってあげようと思った
0033名無しさん@お腹いっぱい。
2007/02/16(金) 15:58:550034名無しさん@お腹いっぱい。
2007/02/16(金) 17:25:280035名無しさん@お腹いっぱい。
2007/02/16(金) 20:24:12手っとり早いお勧めの方法は何ですか?
はっきり言って、理論的なことはどうでもいいです。
最小限の努力で、最大限、見ためだけ高スキルに見えればいいです。
よろしくお願いします。
0036名無しさん@お腹いっぱい。
2007/02/16(金) 20:24:38出来ますか?
0037名無しさん@お腹いっぱい。
2007/02/16(金) 20:26:07Yes.
0038名無しさん@お腹いっぱい。
2007/02/16(金) 20:43:20スクリプトは一日にして成らず、だ
だがあなたの要求だけを見ると高スキルのスクリプトを真似て作ればいいと思われ
問題は努力もしないで中身が理解できれば・・・だが
0039名無しさん@お腹いっぱい。
2007/02/16(金) 20:48:590040名無しさん@お腹いっぱい。
2007/02/16(金) 20:50:49英語でのコミニュケーション能力と、pythonとperlはいいのかい?
0041名無しさん@お腹いっぱい。
2007/02/16(金) 20:51:33つくればいいじゃん
0042名無しさん@お腹いっぱい。
2007/02/16(金) 20:52:54はい。そっちの方は無問題です。
0043名無しさん@お腹いっぱい。
2007/02/16(金) 20:53:380044名無しさん@お腹いっぱい。
2007/02/16(金) 21:01:02探せばあるかも。
0045名無しさん@お腹いっぱい。
2007/02/16(金) 21:07:28Looking For A Japanese Girlfriend
http://www.thinkgeek.com/tshirts/japanese/74a3/
で、
Go away or I will replace you with a very small shell script
http://www.thinkgeek.com/tshirts/frustrations/374d/
0046名無しさん@お腹いっぱい。
2007/02/17(土) 00:40:46鬼畜米英じゃなく鬼畜米兵になっとるw
http://www.thinkgeek.com/tshirts/japanese/74b1/
0047名無しさん@お腹いっぱい。
2007/02/17(土) 01:05:58複数の grep が一つにまとまるのがいい感じだな。
0048名無しさん@お腹いっぱい。
2007/02/17(土) 01:34:50if [ i = y ]
then
echo aaa
fi
とかあるのだが、実際やってもErrorがでて・・・
if [[ i = y ]]
then
echo aaa
fi
みたいに2重括弧にしないといけないのはなぜなんでしょうか?
0049名無しさん@お腹いっぱい。
2007/02/17(土) 01:35:53ksh で 文字コードで grep するエレガントな方法が分かりません。
bash なら、
grep $'\011' hoge.txt
で可能だということは分かっています。
ksh だと、
grep "`echo '\011\c'`" hoge.txt
で同じことが可能だということは分かっていますが、bash ほど簡潔ではありません。
(いずれも Linux 上で確認)
昔、Solaris 8 上の ksh スクリプトで bash での記述例くらいに簡潔に書かれたコードを見た記憶があるのですが…。
分かる方がいらっしゃったらご教授ください。お願いします。
できれば ksh88 でお願いします。
0050名無しさん@お腹いっぱい。
2007/02/17(土) 02:51:41[ はコマンドで、[[ は bash の構文の一つ。
/bin/sh で書くなら [[ は使えない。
あと、比較演算子の書き方やその解釈がちょっと違う。
[ 1 -gt 0 ] と [[ 1 > 0 ]] とか
[ "1+1" -ge 2 ] と [[ "1+1" >= 2 ]] とか
詳細は man bash ね。
0051名無しさん@お腹いっぱい。
2007/02/17(土) 10:33:59if [ i = y ]
then
echo aaa
fi
↑でエラー出ないよ。
もしエラーが出たんなら、[ や ] や = の前後のスペースを忘れたとか、
そういう問題だと思う。([ ]か [[ ]]かの問題とは違う)
[[ ]] は Bourneでは使えないので、できる限り [ ] で書くのがお勧め。
0052名無しさん@お腹いっぱい。
2007/02/17(土) 10:58:27名前にスペースの入ったファイル名のリストを for とか foreach に渡すときは
どうしたらいいでしょうか。
for f in `find なんたらこうたら`; do ほげ "$f"; done; みたいなことをしたいのですが
find の結果のファイル名にスペースがある場合、スペースのとこで割られるようです。
0053名無しさん@お腹いっぱい。
2007/02/17(土) 11:10:46IFS='
' for f in `find なんたらこうたら`; do ほげ "$f"; done;
IFSに改行コードを入れて、それを区切り文字にする。
0054名無しさん@お腹いっぱい。
2007/02/17(土) 11:13:56find の部分をコマンド置換すると、ファイル名のデリミタとしての半角空白なのか、ファイル名中の半角空白なのがシェルから見ると区別がつきません。
上手く動かない原因はこれです。
よってコマンド置換で実現するのは諦めましょう。
- start --------------------
find . -type f |
while read f
do
echo $f
done
- end ----------------------
自分がパッと思いつくのはこれ。
ただ、read コマンドは遅いので、もっとエレガントを考える余地があるかもしれません。
ところで、sh に foreach ってありましたっけ?
0055名無しさん@お腹いっぱい。
2007/02/17(土) 11:15:41IFS=\
for a in `find . -type f`;do echo "$a";done
これでも、名前に改行が含まれるとダメなのでfind -execをおすすめする。
0056名無しさん@お腹いっぱい。
2007/02/17(土) 11:20:18その方法、いいですね!
でも環境変数を触るのって、どうなのでしょう?
触るとしても、
- start --------------------
OLD_IFS=$IFS
IFS='
'
for f in `find . -type f`
do
echo $f
done
IFS=$OLD_IFS
- end ----------------------
を推奨すべきかと。
0057名無しさん@お腹いっぱい。
2007/02/17(土) 11:27:220058名無しさん@お腹いっぱい。
2007/02/17(土) 11:29:43>>57
ああ、本当だ。改行がファイル名に入るとアウトですな。
for や while だと完全ではないですね…。
0059名無しさん@お腹いっぱい。
2007/02/17(土) 12:20:55なんでそんなことする必要があるんだ?
>>53 のスクリプト作って、実行した後の $IFS 見てみた方がいいよ。
0060名無しさん@お腹いっぱい。
2007/02/17(土) 13:11:120061名無しさん@お腹いっぱい。
2007/02/17(土) 13:18:38続きがあっても関係ない。
↓これ試してみろ。
HOGE=hoge command
echo $HOGE
0062名無しさん@お腹いっぱい。
2007/02/17(土) 14:04:31IFS='
' for f in `find -type f`; do echo "$f"; done;
$ sh hoge
sh hoge
for: not found
hoge: 2: Syntax error: ";" unexpected
0063名無しさん@お腹いっぱい。
2007/02/17(土) 14:09:59IFS='
' for f in `find . -type f`; do echo "$f"; done;
だった。
0064名無し募集中。。。
2007/02/17(土) 21:45:40IFSの変更に対して安全かどうなかなんて元のお題には意味なくないか?
元のお題だとそもそもfindで引っかかる数(吐き出す文字数)が予測不能なんだし
tabやspaceのことも含めて for はやめて find | xargs か while の方が安全なんだが
あとファイル名に改行コードが含まれる場合は?とかこの板的には重要かもしれん
けど、そこまで考えるとどうしたら処理できるか?より、そんなファイルが作られないように
するにはどうしたらいいか?という問題になる気がする
その上でそういうファイルをリネームや削除するスクリプトを組みたいっていうなら
環境や状況に合わせたものを組めばいい、動くことが重要で
エレガントな一般的解法なんて考えても無駄だし必要もないはず
0065名無しさん@お腹いっぱい。
2007/02/17(土) 22:54:12フロー制御コマンドは変数=値 command形式では使えないという事実は、
このスレ的には重要。
006652
2007/02/18(日) 09:45:52自分の環境では改行がファイル名に入ることはとりあえずないんですが、
より厳密には find -print0 として IFS に NUL をセットすればいいんですかね?
と思ったんですが... あれ、IFSにNULをセットって、どうやればいいんでしょう?
たびたびすいません。
0067名無しさん@お腹いっぱい。
2007/02/18(日) 11:30:58とした場合、 perl などでは \1 で (\w+?) の内容を
参照できるのですが、 grep (sed, awk など) でそうする方法はありますか?
0068名無しさん@お腹いっぱい。
2007/02/18(日) 12:52:25厳密にやりたかったら
1 find -print0を使ってNULLをレコードの区切りと認識できるコマンドで
処理する(shのwhileやforは使用できない)
2 find -execで1個づつ処理する。
3 perlで全部やる
>>67
sedにはある。awkは知らん。マニュアル嫁。
0069名無しさん@お腹いっぱい。
2007/02/18(日) 13:03:350070名無しさん@お腹いっぱい。
2007/02/18(日) 13:29:370071名無しさん@お腹いっぱい。
2007/02/18(日) 14:30:15繰り返してほざく知恵遅れが小学校の時にいたんだが、
>>68=70 でそいつを思い出した.
もしかするとそいつかもw
0072名無しさん@お腹いっぱい。
2007/02/18(日) 15:13:28まあ、諭されてることすら理解できてないんだろうけど。
0073名無しさん@お腹いっぱい。
2007/02/18(日) 15:32:02007469!=71
2007/02/18(日) 15:33:37他人に煽られたからってお前がその煽り文句を真似して効果があるとは限らんぞ。
0076名無しさん@お腹いっぱい。
2007/02/18(日) 15:59:070077名無しさん@お腹いっぱい。
2007/02/18(日) 17:00:230078名無しさん@お腹いっぱい。
2007/02/18(日) 23:20:22どっちでもできる。
man に載っているよ。
007964
2007/02/19(月) 05:56:44お、仰るとおりですな
>>52
普通?は find コマンドと IFS 変数は関係ないよ
いや余程特殊な環境があるなら分からんけど
IFS 変数は Bourne Shell 系 ( sh, ksh, bash など) で区切り文字の定義に使われる
で find コマンド自体はこの環境変数を参照しないから関係ない
find -print0 は出力する各ファイル名にヌル文字を付加する
で find -print0 が使える環境なら xargs -0 も使えるんじゃない?
>>57さんが既に言ってるけどね
>>67, >>78
sed, grep はあるけど awk はなかったような
0080名無しさん@お腹いっぱい。
2007/02/19(月) 06:11:10grep ではどうやんの?
008264
2007/02/19(月) 07:03:11あ、find -print0 と IFS を弄って while を組合わせたいって意味なら駄目だよ
>>68さんの言ってる方法で
それより -print0 オプションが使えない環境もあるから
まずはそっちを調べた方がいいよ
0083名無しさん@お腹いっぱい。
2007/02/19(月) 07:57:15findコマンド自体では IFSは当然関係ないが、
findの結果を ` ` で取り込んで forの引数にする際に
IFSが参照される。(IFSの影響を受ける)
なので、スペース入りファイル名の問題なら、
IFSの内容を改行コードのみにして for f in `find ...` を実行すればOK
なことは既に上に書かれている。
0084名無しさん@お腹いっぱい。
2007/02/19(月) 17:57:07ちなみに NULL じゃなくて NUL ですね。
0085名無しさん@お腹いっぱい。
2007/02/19(月) 22:58:23頭ではわかっているが、指が憶えてしまっているのでしょうがない。
0086名無しさん@お腹いっぱい。
2007/02/20(火) 02:12:08man awk の文字列関数の項を参照してみな。
もしかしたら gawk だけかもしれないけど。
0087名無しさん@お腹いっぱい。
2007/02/20(火) 10:40:490088名無しさん@お腹いっぱい。
2007/02/20(火) 11:31:38008964
2007/02/20(火) 17:58:58素のAIXじゃ、grep '\(a\)\1' はできたが egrep, grep -E は無理みたい
拡張正規表現だと \1 は使えなさそうあとawkも
gawk は知らんけどgawkは無い環境も多いからawkとgawkを一緒にするな
awkと言えば昔ながらの素のawkのことだよ
linuxでshを語るアホウ(そりゃashだ)と同じやね
009064
2007/02/20(火) 19:15:33shについては、Cygwinもash、今時の素のAIX、HP-UXなら実はkshだったりするから
Solaris、FreeBSDは知らんけど例としてはかなり不適切やね、無視してくれ
0091名無しさん@お腹いっぱい。
2007/02/20(火) 21:12:01set -o emacs
set -o vi
どっち?
0092osuga
2007/02/20(火) 22:49:15HP-UXのデフォルトがkshかよ
0093名無しさん@お腹いっぱい。
2007/02/20(火) 22:58:230094名無しさん@お腹いっぱい。
2007/02/20(火) 23:48:35> 素のAIXじゃ、grep '\(a\)\1' はできた
参考までに grep のバージョン教えてくれ。
>>90
> Cygwinもash
それいつの話?
手元の環境だと ash は入れてあるけど、sh の実体は bash になってるよ?
$ uname -r
1.5.24(0.156/4/2)
$ /bin/sh --version
GNU bash, version 3.2.9(11)-release (i686-pc-cygwin)
Copyright (C) 2005 Free Software Foundation, Inc.
0095名無しさん@お腹いっぱい。
2007/02/21(水) 02:37:28POSIX的には拡張正規表現(ERE))でbackrefernceが使えるということは
一言も書いていないので、grep -E でbackrefernceが使えるGNU grep
なんかが拡張しているということなんだろう。多分。
0096名無しさん@お腹いっぱい。
2007/02/21(水) 04:14:13叩きはすぐ集まってくるけど
grep '\(a\)\1' は実際できるし(AIX5.3、SFU)、基本正規表現(BRE)にあるんで
linuxやHP-UXのgrepでも出来た記憶がある、まぁ昔の事なんで自信はない
拡張正規表現(ERE)にはBREの\( \)にあたるものが無いようで
>>95はフォローしてくれたんだろうけど
実際にやってみたが egrep, grep -E じゃできなさそう(AIX5.3)と既に書いている
HP-UXのshについては昔、といっても11iなんだが
純粋なshでは使えないはずの [[ ]] や alias なんかが使えたんで調べたら
sh-posix とか書かれていて、sh->kshで拡張されたものがほぼ?まんま拡張されてた
なんでHP-UXのshはksh、って位の認識だったんだが
POSIX の sh いうんやから [[ ]] や alias が使えるのが今時の純粋な sh ということかもしれんね
0097名無しさん@お腹いっぱい。
2007/02/21(水) 09:12:36正規表現については以降はこちらへ
↓
正規表現
http://pc10.2ch.net/test/read.cgi/unix/1039165754/
0098名無しさん@お腹いっぱい。
2007/02/21(水) 10:35:280099名無しさん@お腹いっぱい。
2007/02/21(水) 10:37:51だから、sh-posixの部分だけ書けばいい。
正規表現の部分はスレ違い。
0100名無しさん@お腹いっぱい。
2007/02/21(水) 10:57:54solaris においては /bin/sh は sh-posixではなく
/usr/xpg4/bin/sh が ごにょごにょ
FreeBSD では /bin/sh は IEEE Std 1003.2 (``POSIX.2'') に対応する途上
NetBSD では /bin/sh は POSIX 1003.2 and 1003.2a に対応する途上
OpenBSDでは (ry
HP-UX では
0101名無しさん@お腹いっぱい。
2007/02/21(水) 10:59:100102名無しさん@お腹いっぱい。
2007/02/21(水) 12:16:07でも嫁
現在のHP-UXの/bin/shはsh-posixであって、古いbourne shellは存在しない
sh-posixはkshによく似ているが別物
>>90は間違いだらけ
010395
2007/02/21(水) 12:40:01すまん。寝る直前に書いたせいか
フォローのつもりがわけのわからんものになってた。
GNU のツールでそうだからといって、
それがUNIX全般でいえるかというと違うよね。
というのを補足したかった(awkとgawkとか)
0104名無しさん@お腹いっぱい。
2007/02/21(水) 13:49:30以前は /usr/old/bin/sh に Bourne shell があったんだけど今はもうないの?
手元に実機がないので確認できない。
0105名無しさん@お腹いっぱい。
2007/02/21(水) 14:03:34実機がなくても参照できちゃうんだなこれが
http://docs.hp.com/ja/B2355-60104-02/sh.1.html
-
注記 : B シェル (/usr/old/bin/sh) は、HP-UX 11i Version 1.5 以降、削除されました。
代りに、POSIX シェル (/usr/bin/sh) を使ってください。
-
本当に実機がこうであるかは確認していないけどね〜
0106ksh
2007/02/21(水) 19:49:50シェル初心者ですが教えてください。
「ディレクトリの中にあるファイルで、実行権限のないファイルを読み込み
そのファイルに実行権限を付与するシェルが必要なのですがどうすればいいのかわかりません。
OS: AIX shell: ksh
#!/bin/ksh
for filename in ${1:+$1/}* ; do
newfilname=$(print $filename |tr [A-Z] [a-z])
newfilename=$newfilename%.}
print "$filename -> $newfilename"
mv $filename $newfilename
done
とりあえず自宅のfedora core5 のkshで実行したら、
' unexpectedtax error: `
と表示されて困ってます。
どうか教えてください。お願いします。
0107名無しさん@お腹いっぱい。
2007/02/21(水) 19:56:52質問が支離滅裂。実行権限を付けたいといっているのに、
スクリプトではファイル名の大文字を小文字にリネームしようとしている。
あと、クォートが正しくないので、スペース入りファイル名とかでコケるだろう。
釣りじゃないならもう一度よくまとめてから質問し直せ。
0108ksh
2007/02/21(水) 20:43:07リネームするスクリプトを少し変更して作ろうとしているのですが、
このファイルもこけて動かないんです。
0109名無しさん@お腹いっぱい。
2007/02/21(水) 21:12:05そんなの、
#!/bin/sh
chmod +x "$1"/*
だけでいいじゃん。kshである必要もなし。
0110名無しさん@お腹いっぱい。
2007/02/21(水) 21:13:561. シェルスクリプトのことをシェルというな。
2. forの次の行からdoneの前の行までは全部リネーム用でいらないから削れ。
3. man test
4. man chmod
0111名無しさん@お腹いっぱい。
2007/02/21(水) 21:15:07「実行権限のないもののみを選び出す」というのが宿題の一部であると
思われるので、問答無用で+xしちゃいけないかもしれない。
0112名無しさん@お腹いっぱい。
2007/02/21(水) 21:19:54もともと +x なファイルを chmod +x しても影響はない。
AIXで実行しようとしてるし、だとすると
宿題じゃなく、実務で必要なんだろ。
chmod +x で十分。
(ctimeは更新されるけど、そんなの普通関係ない)
0113名無しさん@お腹いっぱい。
2007/02/21(水) 21:23:34えっと、こういうことでしょうか?
#!/bin/ksh
for filename in ${1:+$1/}* ; do
man test
man chmod
done
やってみましたが、なんか、ファイルの数だけマニュアルのようなものが表示され、
実行権限は付きませんでしたが、、
0114名無しさん@お腹いっぱい。
2007/02/21(水) 21:25:510115ksh
2007/02/21(水) 22:08:50#!/bin/ksh
for filename in ${1:+$1/}* ; do
if [[ -f $filename ]] ; then
chmod +x $filename
fi
done
なんとかディレクトリの中のファイルすべてに実行権限を付与できました。
これはシェルスクリプトと言うのでしょうか?
お恥ずかしながらシェルスクリプトとはなにか?イメージが完全でなく・・・
0116名無しさん@お腹いっぱい。
2007/02/21(水) 22:38:30> kshです。
ペソじゃなかったのかw
0117ksh
2007/02/21(水) 22:53:27ルールよくわかってなくてすみませんっw
0118名無しさん@お腹いっぱい。
2007/02/25(日) 06:28:13単に興味本位で聞くけどsh-posixとkshを比較して
実際に機能として違う部分てどんなところがあるの?
0119名無しさん@お腹いっぱい。
2007/02/26(月) 18:34:31あれ、"THE T IN TCSH" なんて項目、昔あったっけ?
turbo csh じゃないじゃん > 昔俺にそう教えた奴
0120名無しさん@お腹いっぱい。
2007/02/26(月) 18:41:120121名無しさん@お腹いっぱい。
2007/02/27(火) 00:44:41それまでは、fep 使ってました。bash は、なじめんな。
今は、zsh 派です。
0122名無しさん@お腹いっぱい。
2007/02/27(火) 04:53:35102とは別人だけど、kshはksh88とksh93で非常に違う。
とくに後者はperlに遜色ないほどの汎用言語になっている。
kshはbashと同じくshベースということで、
bashがkshから採り入れた機能もけっこうある。ローカル変数とか
0123名無しさん@お腹いっぱい。
2007/02/27(火) 17:22:33え?違うんだ、知らなかった
0124名無しさん@お腹いっぱい。
2007/02/27(火) 22:13:24もうwのないkshしかないからなぁ・・・
0125名無しさん@お腹いっぱい。
2007/02/27(火) 22:45:550126名無しさん@お腹いっぱい。
2007/02/27(火) 22:49:25nkf -e < script
nkf -j < script
nkf -s < script
nkf -w < script
で化けないパターンを探してそれに置き換える。
0127名無しさん@お腹いっぱい。
2007/02/27(火) 22:51:13その vi の実体は、賢い vi で、
シェルの ENV がついていけてないとか。
0128名無しさん@お腹いっぱい。
2007/02/28(水) 00:25:54exp 〜 query\"where column_name in\( select col from tableB \) \"
みたくqueryパラメータで副照会できないようなんで
exp 〜 query\"where column_name in\( $COLUMN_NAMES \) \"
なんて具合に変数を埋め込みたい。
シェル変数が展開されてからexportに渡されるようにする方法ないかな?
0129名無しさん@お腹いっぱい。
2007/02/28(水) 00:54:58nkf -g が無いバージョンかな?
0130名無しさん@お腹いっぱい。
2007/02/28(水) 01:00:16nkf -wができることに最近気づいたくらいアップデートしてなかったんで。
0131名無しさん@お腹いっぱい。
2007/02/28(水) 09:20:31中国の恐さにぞっとすること請け合い。
あいつら本気で日本を侵略する気だ。
そして、手下はやはり立命館?
0132118
2007/03/01(木) 04:39:27すんません書き漏れです
知りたいのはsh-posixとksh88の機能差です
kshにksh88とksh93があってかなり違うってのは知ってるというか
kshの情報には大抵2つのバージョンの比較が併記されてるもんだし
ただsh-posixとksh88の比較は見たことがないし違いも見つけられなかったもんで
0133名無しさん@お腹いっぱい。
2007/03/01(木) 06:28:17・ パターンマッチングがegrep相当に拡張
・ [[ ほげ ]] (中身をメタキャラ解釈しないtestのようなもの)
・ 配列が使えた
・ emacs風コマンドライン編集
ってとこか。なおksh93はksh88と挙動が違ったりバグが直されたりしてるし、
ksh88とpdkshでも機能に違いがあるので、
ksh88で動けば他のkshで動作するとは限らない
0134名無しさん@お腹いっぱい。
2007/03/01(木) 22:50:400135名無しさん@お腹いっぱい。
2007/03/02(金) 00:10:52----
yes
・・・・
・・・
・・・・・
IPアドレス xxx.xxx.xx.54
----
no
・・・・
・・・・・
IPアドレス xxx.xxx.xx.123
----
yes
・・・・・・・・・
・・・・・
IPアドレス xxx.xxx.xx.23
こういうふうに加工したいのですが、
yes,xxx.xxx.xx.54
no,xxx.xxx.xx.123
yes,xxx.xxx.xx.23
・・・・・・・・・
・・・・・
の部分は2行のときもあるし10行のときもあります。
0136135
2007/03/02(金) 00:14:33----
と
IPアドレス
という文字をうまく関連付ければ
加工可能とは思うのですが、
具体的にどうしたらいいのかよくわかりません。
最初の
----
を見つけたら
その次の「IPアドレス」という文字列を捕まえて
xxx.xxx.xx.123を確保する、
という形でしょうか。
うまい方法があればヒントをいただけますか?
cat、more、grep、cut、sedなど一般的なコマンドは習得しています。
0137名無しさん@お腹いっぱい。
2007/03/02(金) 00:19:45めんどくさいから perl 使っちゃうな。
0138名無しさん@お腹いっぱい。
2007/03/02(金) 00:34:22for file in xx*; do echo `sed -n '2p;${s/.* //;p}' $file`; done
csplitってPOSIX標準だっけ?
0139名無しさん@お腹いっぱい。
2007/03/02(金) 00:34:300140名無しさん@お腹いっぱい。
2007/03/02(金) 01:17:000141名無しさん@お腹いっぱい。
2007/03/02(金) 01:52:510142名無しさん@お腹いっぱい。
2007/03/02(金) 02:52:27書いてみて
0143名無しさん@お腹いっぱい。
2007/03/02(金) 08:40:46俺も awk に一票だが、
最初と最後をどうにかすれば grep と sed だけでもできそう。
grep -C 1 -x -e ---- | sed ....
こんな感じで。
0144名無しさん@お腹いっぱい。
2007/03/02(金) 08:56:59N;
N;
N;
s/¥(yes¥|no¥)¥n/¥1 /;
s/----¥n//;
s/--¥n//;
s/IPアドレス //;
p'
改行ってどこのsedでも¥nと書けるのだっけ?
0145名無しさん@お腹いっぱい。
2007/03/02(金) 09:03:200146名無しさん@お腹いっぱい。
2007/03/02(金) 09:10:43/¥(yes¥|no¥)/h;
/IPアドレス /{
H;
x;
s/¥(yes¥|no¥)¥n/¥1/;
s/IPアドレス /,/;
p
}' input
どだっ!?
0147135
2007/03/02(金) 13:43:23僕はまだレベルが低いですし
awkは(難しくて)使えないので
>>143さんの
grep -C
オプションでやってみよと思います。
0148名無しさん@お腹いっぱい。
2007/03/02(金) 15:27:320149名無しさん@お腹いっぱい。
2007/03/02(金) 15:32:33ちょっと、質問が複数の意味に取れるけど、
ls > "$1"/"$2"
ってことか?
0150148
2007/03/02(金) 16:42:330151名無しさん@お腹いっぱい。
2007/03/02(金) 17:25:160152名無しさん@お腹いっぱい。
2007/03/02(金) 17:27:36[ -f ファイル ]
0153名無しさん@お腹いっぱい。
2007/03/02(金) 18:47:440154名無しさん@お腹いっぱい。
2007/03/02(金) 19:02:570155名無しさん@お腹いっぱい。
2007/03/02(金) 19:07:440156名無しさん@お腹いっぱい。
2007/03/02(金) 21:48:30便乗質問ですが、よく、ファイルがあるかどうかを判断するのに、
test -fを使えと言われるのですが、実行しても何も起こりません。
何か設定が必要なのでしょうか?
0157名無しさん@お腹いっぱい。
2007/03/02(金) 21:58:240158名無しさん@お腹いっぱい。
2007/03/02(金) 22:18:29test -fだとレギュラーファイル以外はないものと判定されるぞ。
(デバイスファイルとか、broken symlinkとか、socketとか)
0159名無しさん@お腹いっぱい。
2007/03/02(金) 22:36:23だめーっ。Bourneではtest -eは使えなーい。test -fが定石。
0160名無しさん@お腹いっぱい。
2007/03/02(金) 22:40:520161名無しさん@お腹いっぱい。
2007/03/02(金) 23:04:59何かが起こるように書けばいい。
test を実行しただけで何も起こらないのは当たり前。
0162名無しさん@お腹いっぱい。
2007/03/02(金) 23:15:29test...も [ ... ] もコマンドを実行してる。
実行した結果のステータスコードで分岐するだけ。
0163名無しさん@お腹いっぱい。
2007/03/03(土) 00:09:47>>162の通り、testはシェルの内部コマンドではない。Bourneかどうかは関係ない。
まあそれはそれとして、autoconf infoの"Limitations of Builtins"から抜粋。
POSIXも信用せずにportableにしたいならどおぞ。
... use `test -f' or `test -r'. Do not use `test -x', because 4.3BSD
does not have it. Do not use `test -e' either, because Solaris 2.5
does not have it. To test for symbolic links on systems that have
them, use `test -h' rather than `test -L'; either form conforms to
POSIX 1003.1-2001, but older shells like Solaris 8 `/bin/sh' support
only `-h'.
0164名無しさん@お腹いっぱい。
2007/03/03(土) 00:37:340166名無しさん@お腹いっぱい。
2007/03/03(土) 01:21:37どっかで聞いたことがあるけど、
UNIX黎明期を除けばどのシステムでもシェル組み込みコマンドとして実装されている。
ループで最頻出のコマンドが外部呼び出しじゃ実用的な速度が出ないだろうしね。
0167名無しさん@お腹いっぱい。
2007/03/03(土) 01:30:36KernighanとPikeのUnix Programming Environmentにそういう記述があった希ガス。
UNIX第7版とかの時代の話だが。
0168名無しさん@お腹いっぱい。
2007/03/03(土) 07:57:520170名無しさん@お腹いっぱい。
2007/03/03(土) 12:08:23適当なループ回して試してみろ。
testが内部コマンドである現在のシェルでも、
case使った方が、if [ ... ] よりも若干速いよ。
おそらく、内部コマンドとはいえ、独立したコマンドとして
内部的に実行するオーバーヘッドがtestにはかかるんだろう。
caseの場合はシェル本体が直接解釈するから
オーバーヘッドはtestよりも少ないと。
0171名無しさん@お腹いっぱい。
2007/03/03(土) 14:06:00釣りか天然か... 判断に苦しむ。
0172名無しさん@お腹いっぱい。
2007/03/03(土) 14:20:05釣りじゃないだろ。実験してみろ。time sh -c '...' とかで計れる。
確かに caseの方がちょっと早い。
0173名無しさん@お腹いっぱい。
2007/03/03(土) 14:34:36おかしなところがあるなら具体的に指摘してみればいいじゃない
0174名無しさん@お腹いっぱい。
2007/03/03(土) 14:37:35$ time zsh -c 'for i in `seq 1 10000`; do [ a = a ] && :; done'
real 0m3.051s
user 0m2.705s
sys 0m0.207s
$ time zsh -c 'for i in `seq 1 10000`; do case a in a);;esac; done'
real 0m0.915s
user 0m0.703s
sys 0m0.204s
↓おまけ。[ ]の代わりに [[ ]] にすると、内部コマンドじゃなく、
直接のシェル文法になるので、早くなる。
$ time zsh -c 'for i in `seq 1 10000`; do [[ a = a ]] && :; done'
real 0m1.708s
user 0m1.201s
sys 0m0.402s
0175名無しさん@お腹いっぱい。
2007/03/03(土) 15:41:12おかしなところは推測の部分。単に実装の違いだけでしょ。
ksh(93)
case 0.65 real 0.46 user 0.17 sys
test 0.58 real 0.46 user 0.10 sys
pdksh
case 23.23 real 22.45 user 0.20 sys
test 4.96 real 4.74 user 0.14 sys
bash2
case 3.52 real 3.21 user 0.24 sys
test 4.26 real 3.93 user 0.25 sys
ash
case 0.38 real 0.28 user 0.09 sys
test 0.52 real 0.45 user 0.05 sys
0176名無しさん@お腹いっぱい。
2007/03/03(土) 17:55:22その実装の違いを推測してるのではないか? なので、おかしくない。
ちなみに俺の環境では、kshでもtestよりcaseの方が速かったよ。
0177名無しさん@お腹いっぱい。
2007/03/03(土) 18:59:530178名無しさん@お腹いっぱい。
2007/03/03(土) 20:43:22real 0m1.758s
user 0m1.562s
sys 0m0.160s
bash3 case
real 0m1.515s
user 0m1.341s
sys 0m0.150s
確かに少しだけど、case の方が速いね
0179名無しさん@お腹いっぱい。
2007/03/03(土) 20:53:55いや、[[じゃなくて [ と caseを比較するという話だが。
速い順に、
case > [[ > [
となると思う。
0180名無しさん@お腹いっぱい。
2007/03/03(土) 21:13:01あ、そうだったっけか。
bash3 [
real 0m2.388s
user 0m2.042s
sys 0m0.370s
0181名無しさん@お腹いっぱい。
2007/03/04(日) 21:32:58ディレクトリ名とその中にあるファイルサイズが0のファイル名を出力する。
補足1:ディレクトリが特定されていない場合は、現在シェルが働いているディレクトリ名を出力する。
補足2:もし引数がディレクトリ名でない場合は、すべてのコマンドラインの引数にエラーメッセージを出力する。
補足3:ファイル名の一番最初の文字が、「.」の場合は無視するようにする。
0182名無しさん@お腹いっぱい。
2007/03/04(日) 21:54:16問題に曖昧なところがあるけど、こういうことか?
bashじゃなくてもB-sh共通で動く。
dir=${1-.}
if [ ! -d "$dir" ]; then
echo "$dir is not a directory" 1>&2
exit 1
fi
for f in "$dir"/*
do
if [ ! -s "$f" ]; then
echo "$f"
fi
done
0183名無しさん@お腹いっぱい。
2007/03/04(日) 21:55:25大体こんな感じじゃない?
usage() {
echo "Usage: ..." 1>&2
exit 1
}
test -d $1 && find $1 -not -name '\.*' -size 0 -print || usage()
ただし補足1はGNU findの機能を使ってるので、どのfindでもということなら
$1が空だった場合の扱いを自分でする必要がある。あと、「.」で始まる
フォルダは処理したいのなら、find の条件をもうちょっと詰める必要がある。
0184名無しさん@お腹いっぱい。
2007/03/04(日) 21:59:310185名無しさん@お腹いっぱい。
2007/03/04(日) 22:01:31レスありがとうございます。
問題文は元々英語の為、変な訳になって細かい部分が伝わらず申し訳ありません。
英文ですが、元の問題はこちらです。ttp://user.ftth100.com/log/up/log/3569.gif
0186181
2007/03/04(日) 22:21:53分かりやすい解説付でありがとうございます。
この場合、
test -d $1(ディレクトリ名を引数1に格納)
&& find $1 -not -name '\.*' -size 0(ファイル名の頭文字が「.」、サイズが0の物をはじく)
-print || usage() (結果をusage()に返し、出力)
usage() で、正常ならば結果を出力。エラーならば1>&2が働きエラーを表示。そしてexitで終了。
といった感じでしょうか?
0187名無しさん@お腹いっぱい。
2007/03/04(日) 22:46:22この問題って出所はどこなの?
0189名無しさん@お腹いっぱい。
2007/03/04(日) 23:23:20>>181 のいう通りなので、後は自分で解読してみてください。
0190名無しさん@お腹いっぱい。
2007/03/04(日) 23:24:060191名無しさん@お腹いっぱい。
2007/03/05(月) 14:36:49短絡評価でぐぐれ
0192名無しさん@お腹いっぱい。
2007/03/05(月) 15:46:28sed -n '/^[yn][eo]/p;s/^IPアドレス.//p' data.txt | fmt -w 18 | tr ' ' ,
0193192
2007/03/05(月) 15:55:14yes/no 個別に書くべきですね。
それとスペースを数えると正しくは fmt -w 19 だ ww
0194192
2007/03/05(月) 16:14:27スレ汚し済まない。
0195名無しさん@お腹いっぱい。
2007/03/05(月) 16:49:38perl -ne 'BEGIN { $/ = "----\n" } /(yes|no).*(\d+(?:\.\d+){3})/s && print "$1,$2\n"'
0196名無しさん@お腹いっぱい。
2007/03/05(月) 17:46:13sed -f 135.sed
$ cat 135.sed
/^----/{N
s/^----\n//
x
d
b
}
/^IPアドレス /{
s/IPアドレス /,/
x
G
s/\n//
b
}
d
0197名無しさん@お腹いっぱい。
2007/03/07(水) 17:04:39一行ずつ一つのログファイルに延々と結果が記載されます。
100
ABC
101
200
DEF
201
…こんな感じで3行ずつが一連のアクションです。
これを以下のように整形したいのですが、妙案は有りますでしょうか?
100,ABC,101
200,DEF,201
ご教示いただければ幸いです。
0198名無しさん@お腹いっぱい。
2007/03/07(水) 17:29:18sed 'N;N;s/¥n/,/g'
む、あたまに余計な空行が付くな。
0199名無しさん@お腹いっぱい。
2007/03/07(水) 17:31:060200名無しさん@お腹いっぱい。
2007/03/07(水) 18:03:28やっぱりsedを使うのかな?と思い本を見ていたところでした。
なるほどNで行数分読み込んで、改行\nを,に置き換える…。
見れば直ぐに解りますが、これを0から考えるのは大変でした。
今度は誰かに教えれるよう、頑張ります。
素早いご解答ありがとうございました!
0201名無しさん@お腹いっぱい。
2007/03/08(木) 12:24:02利用者が指定した文字列の書いてあるファイルを読み込んで、
配列に文字列を一つずつ格納し、その文字列を順番に出力させたいのですが、
どのようにすれば良いのでしょうか?
0202名無しさん@お腹いっぱい。
2007/03/08(木) 12:32:35どのシェルよ?
少なくともピュアBourneシェルには配列はない。
0203名無しさん@お腹いっぱい。
2007/03/08(木) 12:33:26申し訳ありません。bashです。
0204名無しさん@お腹いっぱい。
2007/03/08(木) 12:37:11tr ' ' '¥012' < ユーザーが指定したファイル | sort
という意味?
指定したファイルの中はどんな構造なの?
1行に1語なのか、フリーテキストか。
0205名無しさん@お腹いっぱい。
2007/03/08(木) 12:40:27指定したファイルは、おっしゃる通り、1行1語のテキストファイルです。
Sapporo
Tokyo
Osaka
Nagoya
Fukuoka
といった感じです。
単純に中身を表示するだけなら、
echo -n "ファイル名を入力してください:"
read x
cat $x
でよいと思われるのですが、一度配列に全文字列を格納してやるので困っています…。
0206名無しさん@お腹いっぱい。
2007/03/08(木) 12:46:39sort そのファイル
とするのとは違うの?
0207名無しさん@お腹いっぱい。
2007/03/08(木) 12:55:10sort ファイル とは違い、この場合だと、
array[0]=Sapporo
array[1]=Tokyo
array[2]=Osaka
array[3]=Nagoya
array[4]=Fukuoka
i=0
while [$1 -le 5]
do
echo ${array[$i]}
let i=$i+1
done
読み込んだテキストファイルをこのような感じで出力させたいです。
0208名無しさん@お腹いっぱい。
2007/03/08(木) 12:58:490209名無しさん@お腹いっぱい。
2007/03/08(木) 13:05:51シェルスクリプトじゃなきゃいかんの?
perlかなんか使った方が楽じゃない?
0210名無しさん@お腹いっぱい。
2007/03/08(木) 13:12:43「整列させて」という意味ではないことは理解した。
0211名無しさん@お腹いっぱい。
2007/03/08(木) 13:16:34words=($words $word)
done < 指定したファイル
してあとは一緒。
0212名無しさん@お腹いっぱい。
2007/03/08(木) 13:43:20perlじゃ駄目なんです。
>>211
echo -n "ファイル名を入力してください:"
while read word; do
words=($words $word)
done < $word
という事でしょうか?
0213名無しさん@お腹いっぱい。
2007/03/08(木) 14:02:360214名無しさん@お腹いっぱい。
2007/03/08(木) 14:07:43すいません・・・
どうやれば良いのでしょうか?
0215名無しさん@お腹いっぱい。
2007/03/08(木) 14:10:26echo -n "ファイル名を入力してください:"
read source
while ....
done < $source
あとは出力のためのループ
0216名無しさん@お腹いっぱい。
2007/03/08(木) 14:52:24echo -n "ファイル名を入力してください:"
read source
while read word; do
words=($words $word)
done < $source
cat $source | while read
do
echo $words
let source=$source+1
done
でやってみましたが、テキストの最初の文字列しか表示されません。
後半の出力ループがいけないのでしょうか?
0217名無しさん@お腹いっぱい。
2007/03/08(木) 15:06:490218名無しさん@お腹いっぱい。
2007/03/08(木) 15:12:44代わりに一パラメータで逃げてみた。
while read word; do
set -- $* $word
done < $source
for word in $*; do
echo $word
done
0219名無しさん@お腹いっぱい。
2007/03/08(木) 15:18:07×一パラメータ
○位置パラメータ
あんど、こう書くらしい。
while read word; do
size=${#words[@]}
words[$size]=$word
done < $source
for word in ${words[@]}; do
echo $word
done
0220名無しさん@お腹いっぱい。
2007/03/08(木) 15:24:40↓
http://pc11.2ch.net/test/read.cgi/linux/1154578200/
ここはBourneのみでよろしこ。
0221名無しさん@お腹いっぱい。
2007/03/08(木) 15:49:17動作確認出来ました。本当にありがとうございました。
>>220
誘導ありがとうございます。
スレ違いで申し訳ありませんでした。
0222名無しさん@お腹いっぱい。
2007/03/08(木) 15:53:31教えてください
#!/bin/sh
COUNTER=0
while [ $COUNTER -lt 100 ]; do
mv "$COUNTER".jpg /home/more/
let COUNTER=COUNTER+1
done
こんな感じのとき最初の10までが1桁になってしまうのですが
01 02 03,,,,
行頭に0を付けた2桁で処理するのはどうすれば良いのでしょうか?
00-09と10-99でループをわけるしか無いのでしょうか?
0223名無しさん@お腹いっぱい。
2007/03/08(木) 15:59:51mv `printf %02d $COUNTER`.jpg /home/more
なければ
mv `echo "0$COUNTER" | sed 's/0*¥(..¥)$/¥1/'`.jpg /home/more
とか、
mv `echo "0$COUNTER" | rev | cut -b1,2 | rev` /home/more
とか。
0224名無しさん@お腹いっぱい。
2007/03/08(木) 16:09:12for COUNTER in `seq -w 0 99`; do : ...; done
↑でループすれば桶。
あと、letコマンドは純粋な shには無いぞ。
0225名無しさん@お腹いっぱい。
2007/03/08(木) 16:11:22そもそもループすら不要で、
mv [0-9][0-9].jpg /home/more
だけで一発。シェルは不要。
0226名無しさん@お腹いっぱい。
2007/03/08(木) 16:11:480227名無しさん@お腹いっぱい。
2007/03/08(木) 16:12:07ありがとうございました。
最終行でうまくいきました。
上の2個も含め手法を理解するように勉強してみます
0228名無しさん@お腹いっぱい。
2007/03/08(木) 16:15:29ので不要じゃないわよ>>225
0229名無しさん@お腹いっぱい。
2007/03/08(木) 16:16:49お約束どおり釣れましたよ。おめでとう。
0230名無しさん@お腹いっぱい。
2007/03/08(木) 16:18:58ありがとう。
実際にはdateから自動生成された莫大な
画像データを部分的に抽出しながら動画生成を
行うので
例に出したのより多少複雑に書き直します
seqも実験してみます
0231名無しさん@お腹いっぱい。
2007/03/08(木) 16:20:11[root@localhost /tmp]$ ls
[0-9][0-9].txt
となります。
00.txtから99.txtを作りたいのですが…
0232名無しさん@お腹いっぱい。
2007/03/08(木) 16:20:180233名無しさん@お腹いっぱい。
2007/03/08(木) 16:23:11zsh -c 'touch {00..99}.txt'
とか
0234名無しさん@お腹いっぱい。
2007/03/08(木) 16:26:04どういう結果になってほしいんだろう。
0235名無しさん@お腹いっぱい。
2007/03/08(木) 16:27:16は、書かれてしまったから
touch `seq -s ".txt " -w 99"`.txt
0236名無しさん@お腹いっぱい。
2007/03/08(木) 16:27:590237名無しさん@お腹いっぱい。
2007/03/08(木) 16:28:4900.txtから連番で99.txtまでのファイルが欲しいんでしょ
0238名無しさん@お腹いっぱい。
2007/03/08(木) 16:30:36いつものお約束も釣れましたよ。おめでとう。
0239名無しさん@お腹いっぱい。
2007/03/08(木) 16:31:170240名無しさん@お腹いっぱい。
2007/03/08(木) 16:35:08ありがとうございました!
zshって凄いですね。
でも、それに依存しないよう
>>235さんの方法を覚えます。
0241名無しさん@お腹いっぱい。
2007/03/08(木) 16:38:39exprを使うのが定石。
expr 0$COUNTER : '.*\(..\)'
0242名無しさん@お腹いっぱい。
2007/03/08(木) 16:40:100243名無しさん@お腹いっぱい。
2007/03/08(木) 16:43:230244名無しさん@お腹いっぱい。
2007/03/08(木) 16:46:42seq -f %02g.txt 0 99
の方がエレガント。
0245名無しさん@お腹いっぱい。
2007/03/08(木) 16:53:02-sは間に挟む文字列だから最後の.txtがないと、
00.txt ... 98.txt 99 で終わってしまうぞ。
でも正解は>>244。
0246名無しさん@お腹いっぱい。
2007/03/08(木) 16:57:54確かにこっちなら完璧に出来ますね。
ところで %02g と言うのは何なんでしょうか?
0247名無しさん@お腹いっぱい。
2007/03/08(木) 17:06:19man seq
つーか
man 3 printf
0248201
2007/03/08(木) 18:43:31最後にもうひとつだけ質問させてください。
出力をする時に配列の反対(リバースオーダー)から出力をするのはどうやれば良いのでしょうか?
例えば、
Tokyo
Osaka
Nagoya
とあったら
Nagoya
Osaka
Tokyo
と出力されます。
0249名無しさん@お腹いっぱい。
2007/03/08(木) 18:46:19tac
0250名無しさん@お腹いっぱい。
2007/03/08(木) 18:51:21done | tac
のようにパイプすればいいのではないでしょうか。
tacがない環境では、
for ...
done | sed '1!G;h;$!d'
0251201
2007/03/08(木) 19:14:20これでなんとか単位が取れます
0252名無しさん@お腹いっぱい。
2007/03/08(木) 19:25:380253名無しさん@お腹いっぱい。
2007/03/08(木) 19:46:300254名無しさん@お腹いっぱい。
2007/03/09(金) 00:33:46↓みたいに書いてみたのですがエラーでちゃいます。なぜ??
#!/bin/csh
set ALLCOUNT = 5
@ CT = 1
@ NO = 3
@ CN = ""
while ( $NO <= $ALLCOUNT )
set CN[$CT] = `sed -n "$NO p " job.txt
@ CT ++
@ NO ++
end
0255名無しさん@お腹いっぱい。
2007/03/09(金) 01:11:36配列を使おうと思った時点で負け。別の方法を探すべし。
0256名無しさん@お腹いっぱい。
2007/03/09(金) 01:17:09>>201と同じ学校の人?
0257名無しさん@お腹いっぱい。
2007/03/09(金) 01:19:14ダメっぽ?
>256
いや趣味
0258名無しさん@お腹いっぱい。
2007/03/09(金) 07:50:56それが宿題だとすると、そんな教官がいるような学校に
進学した時点で負け。
0259名無しさん@お腹いっぱい。
2007/03/09(金) 07:52:390260名無しさん@お腹いっぱい。
2007/03/09(金) 07:54:46cshで書かなければいけない合理的な理由は存在しない。
趣味なら自分で研究すること。
0261名無しさん@お腹いっぱい。
2007/03/09(金) 17:07:470262名無しさん@お腹いっぱい。
2007/03/09(金) 19:22:220263名無しさん@お腹いっぱい。
2007/03/09(金) 21:47:41所詮人間がデータ構造を解釈しているだけの話。
0264名無しさん@お腹いっぱい。
2007/03/10(土) 21:31:59というより口だけで実は分からないだけですかおまいら。
0265名無しさん@お腹いっぱい。
2007/03/10(土) 21:37:01宿題かどうかが問題なんじゃなくて、cshのスクリプトは論外ということ。
誰も答えるはずがない。
0266名無しさん@お腹いっぱい。
2007/03/10(土) 21:44:390267名無しさん@お腹いっぱい。
2007/03/10(土) 21:45:26__l // / | \ \\ ゙、 / ̄ ̄ ̄ ̄ ̄ ̄
/ :::|| / / / l l ヽ ヽヽド、 /
l::::::::::|| / / / ! l ヽ ヽ ヽヽ ||:::::ヽ | l 十`` 十_ヽ
斤.::::::::||/ / //! ハ l ! ヽ ', ゙ヽ||::::::::勺 | レ d、 (_| _)
|ll|i :::::::|| l l イ l /!l | ヽ ト、|、 ト、 l l、||::::::::}ll| | ┼‐、ヽ ┴┴
|ll|ヽ:::::|l !l |l!‐!‐ト、l ヽ | l | ヽ | l i l l||:::::::/!l| | ノ 月 l |
|lll| `ー! l | l 」-=ミ|`ヽ ヽ | !-‐!‐|-l、|} l |r、〃|ll| | 二二`` l__ヽ
L!l | l | 〃{ノ::::iヾ ヽ! ,. =-ミ、!ハ l !"´ |ll| | ノ _)
{l |!l | ヽ `ー" ' トイ:::}ヾ | l | |ll」 | ─ァ
ヽ |l !| `二ノ '| || | /\
l |', | /)|l l | ┼‐、ヽ
l | ゙、 ` ´ /-イ| l | ノ
!| \ ヽニヽ , ′/゙! l ∠ '⌒)
| |ヽ、 ー / 〃 | ! | 「
,.rr| 丶、 ,.. '´ト、 l′ ヽ ゚
l::l {:| ` ´ |::}} \______
_. -‐1::ヽ' -、 _,.. -‐ン::|ヽ、
_.. -‐ "´ |:::::::::`ゝヽ /rJ::'"´:::::::! ` 丶、
0268名無しさん@お腹いっぱい。
2007/03/10(土) 21:52:540269名無しさん@お腹いっぱい。
2007/03/10(土) 22:04:010270名無しさん@お腹いっぱい。
2007/03/10(土) 22:11:17毎回、問題を出すのにネタが尽き気味で大変です。
宿題が出た人、どんどんその問題を書き込んでください。
一部変えて出題に使わせていただきます。
0271名無しさん@お腹いっぱい。
2007/03/10(土) 22:19:470272名無しさん@お腹いっぱい。
2007/03/10(土) 22:29:26分かった。
うちで使うスクリプトを問題として出してやる。
0273名無しさん@お腹いっぱい。
2007/03/12(月) 10:34:35tacをシェルスクリプトで書かせる。
0274名無しさん@お腹いっぱい。
2007/03/12(月) 10:47:03そういえば、まだ bash の回答がない。
ttp://golf.shinh.org/p.rb?reverse+lines
この問題にかぎらず、sh で参戦してる人が少ないのでおまいらもやってみてくれ。
おれもがんばってみる。
0275名無しさん@お腹いっぱい。
2007/03/12(月) 17:31:24何も無理してshだけで文字列操作するこたーないと思うけど。
#!/bin/sh
f () { local l; read -r l && { f; echo "$l"; }; }
f
0276名無しさん@お腹いっぱい。
2007/03/12(月) 18:28:56readの -r オプションはbash依存。localコマンドは Bourneで使えない。
あと、再帰呼出しは重い。非再帰版の方がエレガント。
出題ネタにしたいので、回答は省略。
0277名無しさん@お腹いっぱい。
2007/03/12(月) 18:44:38txt=
IFS='
'
while read line
do
txt="${line}
${txt}"
done
echo -n "$txt"
0278名無しさん@お腹いっぱい。
2007/03/12(月) 19:10:00CodeGolfが出ちゃったからbashism上等の答えになったんだと思う。
0279名無しさん@お腹いっぱい。
2007/03/12(月) 19:18:190280名無しさん@お腹いっぱい。
2007/03/13(火) 01:40:570281名無しさん@お腹いっぱい。
2007/03/13(火) 02:44:26>>3
> POSIX: Shell & Utilities (標準規格)
> http://www.opengroup.org/onlinepubs/009695399/utilities/contents.html
0282名無しさん@お腹いっぱい。
2007/03/13(火) 09:45:19なるほどね
0283名無しさん@お腹いっぱい。
2007/03/13(火) 20:53:58single quotation mark("'")をエスケープしたいのですが、
次のコードは×となります。
どなたか、どうやって、"'"をエスケープするのか
教えていただけますか?
たとえば、
awk '{printf "\'%s\'", $2}' file
として、
$2フィールドの値を
'AX'
'PY'
'CU'
のように''で囲みたいのです。
0284名無しさん@お腹いっぱい。
2007/03/13(火) 20:57:48'{printf "'
¥'
'%s'
¥'
'¥n", $2}'
見やすいように改行入れてみたが実際にはくっつけて記述。
0285名無しさん@お腹いっぱい。
2007/03/13(火) 21:15:45できました!
ありがとう。
なんでできるのか、もう少し詳しく
教えていただけないでしょうか?
0286名無しさん@お腹いっぱい。
2007/03/13(火) 21:48:08シェルの解釈する文字をエスケープしながらね。
だから、
'{printf "'"'%s'"'\n", $1}'
などでもいい。
0287名無しさん@お腹いっぱい。
2007/03/13(火) 21:49:440288名無しさん@お腹いっぱい。
2007/03/13(火) 22:15:15wget アドレス >>ファイル名
で実行して失敗しました。
どうしたらいいかわかりますか?
0289名無しさん@お腹いっぱい。
2007/03/13(火) 22:19:000290名無しさん@お腹いっぱい。
2007/03/13(火) 22:25:010291名無しさん@お腹いっぱい。
2007/03/14(水) 17:16:17正しく判別するにはどうすればいいでしょうか?
grep -E ".*<>.*<>[0-9]+/[0-9]+/[0-9].* [0-9:.]+ ID:[a-zA-Z0-9+-/]+<>.*<>.*"
こんな感じでひっかけようと思ったのですが、
何かの間違いでメール欄やレス欄に <> が
まぎれこんでしまってる場合でもマッチしてしまいます。
やりたいことは、このようなゴミのまじった行を削除することなのですが
どうするのがよいでしょうか?
0292名無しさん@お腹いっぱい。
2007/03/14(水) 18:47:380293名無しさん@お腹いっぱい。
2007/03/14(水) 21:33:18全部捨てたらいいんじゃないか。
0294名無しさん@お腹いっぱい。
2007/03/14(水) 22:54:480295名無しさん@お腹いっぱい。
2007/03/14(水) 23:24:19-O
0296名無しさん@お腹いっぱい。
2007/03/15(木) 03:28:47宿題にするな。テストにしとけ。
0297名無しさん@お腹いっぱい。
2007/03/15(木) 09:45:110298名無しさん@お腹いっぱい。
2007/03/15(木) 23:41:20普通に構文を書くとパスワード入力等を求められると思うのですが
手動入力でなく、完全自動化にできないでしょうか?
Shellは「sh」です。
OSはRedhatです
0299名無しさん@お腹いっぱい。
2007/03/15(木) 23:42:09ssh-agent
0300名無しさん@お腹いっぱい。
2007/03/15(木) 23:53:17他のプログラムとかの絡みで使用できるか・・・・
0301名無しさん@お腹いっぱい。
2007/03/16(金) 00:12:200302名無しさん@お腹いっぱい。
2007/03/16(金) 00:13:16板違い。
【sed】シェルスクリプト総合@LINUX Part2【awk】
http://pc11.2ch.net/test/read.cgi/linux/1154578200/
むしろこっちか。
くだらねえ質問はここに書き込め! Part 142
http://pc11.2ch.net/test/read.cgi/linux/1173460712/
0303名無しさん@お腹いっぱい。
2007/03/16(金) 07:56:47ssh-agentを知ってるなら質問するなよ!
0304名無しさん@お腹いっぱい。
2007/03/16(金) 08:32:480305名無しさん@お腹いっぱい。
2007/03/16(金) 08:33:30ただし、秘密鍵を盗まれないように。
0306名無しさん@お腹いっぱい。
2007/03/16(金) 10:28:230307306
2007/03/16(金) 10:30:13http://www.gentoo.org/proj/en/keychain/
0308名無しさん@お腹いっぱい。
2007/03/16(金) 22:01:18expect
0309名無しさん@お腹いっぱい。
2007/03/16(金) 22:13:130310名無しさん@お腹いっぱい。
2007/03/18(日) 18:56:130311名無しさん@お腹いっぱい。
2007/03/18(日) 22:20:49入ってないなら入れればいいじゃん。
0312名無しさん@お腹いっぱい。
2007/03/18(日) 23:45:58お馬鹿さん?
0313名無しさん@お腹いっぱい。
2007/03/20(火) 00:15:560314名無しさん@お腹いっぱい。
2007/03/20(火) 00:34:230315名無しさん@お腹いっぱい。
2007/03/20(火) 00:46:09必要あるなら入れなきゃいかんだろ。
0316名無しさん@お腹いっぱい。
2007/03/21(水) 00:06:29perlの小さなライブラリを追加といってExpect.pmでよくない?
かなりプログラム臭くなるのでexpectに比べてはいけないが、次善の策ではあるはず。
0317名無しさん@お腹いっぱい。
2007/03/21(水) 01:28:070318名無しさん@お腹いっぱい。
2007/03/21(水) 01:51:290319名無しさん@お腹いっぱい。
2007/03/21(水) 02:25:07パスなしでログインできるのが怖いなら、authorized_keysにcommandを書いて、できることを限定しておくといいよ。
スレ違いだったらすまん。
0320名無しさん@お腹いっぱい。
2007/03/28(水) 01:47:010321名無しさん@お腹いっぱい。
2007/03/28(水) 02:04:060322名無しさん@お腹いっぱい。
2007/03/28(水) 02:30:58awkでやれ
awk '{line[NR]=$0}END{for(i=NR;i>0;i--){if(line[i]=="検索パターン") print line[i];}}' input.txt
0323名無しさん@お腹いっぱい。
2007/03/28(水) 02:50:520324名無しさん@お腹いっぱい。
2007/03/29(木) 16:52:36行数は同じでそれぞれの行が関係のある物になっています。
現在、その二つの行をそれぞれスペースで区切って接続を行いたく考えています。
A.txt
山田
山下
B.txt
太郎
二郎
AB.txt
山田 太郎
山下 二郎
A.txtとB.txtからAB.txtを作成する妙案などございましたらご教示いただけませんでしょうか?
よろしくお願い致します。
0325名無しさん@お腹いっぱい。
2007/03/29(木) 16:56:53paste A.txt B.txt > AB.txt
0326名無しさん@お腹いっぱい。
2007/03/29(木) 17:09:44PASTE(1)
名前
paste - ファイルを行単位でマージする
大変失礼いたしました…orz
シェルスクリプトとかそう言うレベルで無かったことをお許し下さい…。
0327名無しさん@お腹いっぱい。
2007/03/30(金) 09:37:33幸子の場合、a.txtが山田となっていたら
里中に変更する。という条件付きくらいにしとけば
スクリプトでしなきゃいかんけどな。
0328名無しさん@お腹いっぱい。
2007/03/30(金) 15:20:07そのenvelope Fromを、実データのFromに置換して/usr/bin/vacation
に渡すスクリプトを書きたいのですが・・・
sed -n 's/^From: [^<]*<\([^>]*\).*/\1/p'の内容を覚えさせておいて、
もう一度先頭から読み込んで置換すればよいと思いますが、
その方法がわからないのです。
微妙な内容なのでググるためのキーワードもいまいちで、ヒットしません。
別にsedでなくてpealやawkでもよいのですが、何かいい方法はありますでしょうか?
0329名無しさん@お腹いっぱい。
2007/03/30(金) 15:26:46そのまま
・覚えさせる->ファイルに書く
・もう一度先頭から読み込んで置換する->そうする
でいいんじゃないの?
0330名無しさん@お腹いっぱい。
2007/03/30(金) 16:01:32頭とケツにそれぞれ「”」を付けたいです。
何か良い方法は有りませんでしょうか?
0331名無しさん@お腹いっぱい。
2007/03/30(金) 16:08:360332名無しさん@お腹いっぱい。
2007/03/30(金) 16:17:30パイプが無駄。一発でできる。
sed 's/\(.*\)/"\1"/'
0333名無しさん@お腹いっぱい。
2007/03/30(金) 16:24:130334328
2007/03/30(金) 16:31:53難しく考えずに、そうすることにします。
0335名無しさん@お腹いっぱい。
2007/03/30(金) 16:44:44ありがとうございます。
頑張ってsed覚えます。
0336328
2007/03/30(金) 17:10:27と思ったら、メール出力から起動されるプログラムは
きわめて弱い実行権限(nobody)しかないので、/tmpにさえ
ファイルを作れません。(人間がテストしたときは巧くいきましたが・・)
権限を強めればセキュリティーリスクが増大するし、
やはり、スクリプトの中で記録と標準入力の再読み込みが必要な模様です。
まあ記録は置換文字列に変数を使えることが判ったので何とかなりそうですが、
「初めからもう一度実行」が途方に暮れてしまいますね。
何かよい方法ありますでしょうか?
0337名無しさん@お腹いっぱい。
2007/03/30(金) 17:14:32・そもそも sendmail でも postfix でも .forward のファイル所有者と
同じ権限でプログラムが起動する。nobody にはならない。
0338328
2007/03/30(金) 18:36:24なるほど
では、ほかの原因を考察して見ます。
ありがとうございます。
0339名無しさん@お腹いっぱい。
2007/03/30(金) 22:30:53sed 's/.*/"&"/'
でもいいな。
0340名無しさん@お腹いっぱい。
2007/03/30(金) 23:05:57正規表現は使わない方が速いかな。
awkで、
awk '{print "\""$0"\""}'
0341名無しさん@お腹いっぱい。
2007/04/03(火) 01:43:34「\」を前に置いても駄目でした…
0342名無しさん@お腹いっぱい。
2007/04/03(火) 02:26:06system が起動しているシェルに食われたんじゃね?
0343名無しさん@お腹いっぱい。
2007/04/04(水) 00:17:45例えばこんな感じ。実際はこんなシンプルじゃないけど。
awk '{system("grep \"^$\" $1")}' input.file
systemが食われたのか、systemの引数の中では引用符が使えないのか、切り分けができません。
0344名無しさん@お腹いっぱい。
2007/04/04(水) 00:26:480345名無しさん@お腹いっぱい。
2007/04/04(水) 01:00:44あそっか、$1は""の外でした。。
awk '{system("grep \"^$\" "$1)}' input.file
本物は業務で使う予定だからコピペできないんだよね。
0346名無しさん@お腹いっぱい。
2007/04/07(土) 02:11:040347名無しさん@お腹いっぱい。
2007/04/08(日) 22:55:59ちゃんと伝わっていなかったようで。
awkの中にシェルの変数の$1入れてもawkがもっていっちゃうからダメなんだって。
0348名無しさん@お腹いっぱい。
2007/04/09(月) 22:22:34そうか?普通に↓とか使えてるぞ?
awk '{sum[substr($0,a,b)]+=substr($0,c,d);}END{for(n in sum)print n,sum[n];}' input.txt
0349名無しさん@お腹いっぱい。
2007/04/10(火) 20:40:57>>343や>>345の例だと、$1をシェルがもっていっちゃって動かないだろうから、
本来やりたいことである
>awkのsystem関数に与えるコマンド文字列の中で「"」や「'」って使える?
の問題とは違ったところでハマっているでしょ、ってことを書いただけなんだけど。
($1にはinput.txtを入れたいのだろうと推測)
それに対して、$数字は awkで使用できるよ、と書かれても困っちゃうんだが。
0350名無しさん@お腹いっぱい。
2007/04/11(水) 06:22:32言いたいだろうことは理解するが、347がそれが伝わる書き方とは思えなかったぞ。
例えば、何を誰がもっていっちゃうと書いたか、347と349を比較してみ。
0351名無しさん@お腹いっぱい。
2007/04/13(金) 00:00:330352名無しさん@お腹いっぱい。
2007/04/13(金) 01:37:02フィールドセパレータ(デフォルト空白文字)で区切られたn番目のフィールドを
$nで参照できるんだよな。
awk '{system("grep \"^$\" "$1)}' input.file
で$1はinput.fileから読み込んだカレントレコードの1番目のフィールドを
参照すると。
$数字がawkで使えるのは良いとして結局"や'は
system関数の引数の中で使えるのかどうか?
0353名無しさん@お腹いっぱい。
2007/04/13(金) 16:02:04Debianを使っているときにはUTF-8を、
FreeBSDを使っているときにはEUC-JPを
環境変数LANGに設定するようにしたいのですが
どのようにコードをかけばよいのでしょうか?
0354名無しさん@お腹いっぱい。
2007/04/13(金) 16:07:45uname とか hostname あたり見るとか。
0355353
2007/04/13(金) 16:42:04unameとif文を使えばできると思うんですけど
それでsourceコマンドを実行したときに
ちゃんとわりあたるかどうか・・・
0356名無しさん@お腹いっぱい。
2007/04/13(金) 16:54:07おいおい、sourceなんて使わないよ。
あと、ifじゃなくてcaseを使うのが定石。
case `uname -s` in
Linux) export LANG=ja_JP.UTF-8;;
FreeBSD) export LANG=ja_JP.eucJP;;
esac
0357名無しさん@お腹いっぱい。
2007/04/13(金) 16:55:19なんで source が出てくるのかよくわからん。
0358名無しさん@お腹いっぱい。
2007/04/15(日) 15:34:49Cとかだとswtichは敬遠される傾向にあるけどな。
0359名無しさん@お腹いっぱい。
2007/04/15(日) 17:19:240360名無しさん@お腹いっぱい。
2007/04/15(日) 17:33:16if [ `uname -s` = Linux ]; then
export LANG=ja_JP.UTF-8
elif [ `uname -s` = FreeBSD ]; then
export LANG=ja_JP.eucJP
fi
となって、unameの実行が2回になって無駄になる。
かと言ってunameを1回にしようとすると、
tmp=`uname -s`
if [ $tmp = Linux ]; then
export LANG=ja_JP.UTF-8
elif [ $tmp = FreeBSD ]; then
export LANG=ja_JP.eucJP
fi
となって、シェル変数1つが余分に要るので美しくない。
よって、caseを使うのがモストエレガント。
0361名無しさん@お腹いっぱい。
2007/04/15(日) 17:37:03お前の美学はよくわかった。
0362名無しさん@お腹いっぱい。
2007/04/15(日) 17:41:220363名無しさん@お腹いっぱい。
2007/04/16(月) 19:45:580364名無しさん@お腹いっぱい。
2007/04/16(月) 19:58:240365名無しさん@お腹いっぱい。
2007/04/16(月) 20:37:020366名無しさん@お腹いっぱい。
2007/04/16(月) 22:11:510367名無しさん@お腹いっぱい。
2007/04/16(月) 22:42:570368名無しさん@お腹いっぱい。
2007/04/16(月) 23:46:400369名無しさん@お腹いっぱい。
2007/04/16(月) 23:52:070370名無しさん@お腹いっぱい。
2007/04/17(火) 00:16:38sh
0371名無しさん@お腹いっぱい。
2007/04/17(火) 00:41:10どの OS の?
0372名無しさん@お腹いっぱい。
2007/04/17(火) 00:47:25普通のbshなら.しか使えない。
HP-UXやAIXのshは中身がkshなんで。
0373名無しさん@お腹いっぱい。
2007/04/21(土) 02:11:17http://journal.mycom.co.jp/news/2007/04/20/023/index.html
0374名無しさん@お腹いっぱい。
2007/04/24(火) 14:20:370375名無しさん@お腹いっぱい。
2007/04/25(水) 21:35:530376名無しさん@お腹いっぱい。
2007/04/25(水) 21:45:150377名無しさん@お腹いっぱい。
2007/04/25(水) 21:50:110378名無しさん@お腹いっぱい。
2007/04/25(水) 21:52:270379名無しさん@お腹いっぱい。
2007/04/25(水) 21:55:090380名無しさん@お腹いっぱい。
2007/04/25(水) 22:01:270381名無しさん@お腹いっぱい。
2007/04/25(水) 22:06:430382名無しさん@お腹いっぱい。
2007/04/26(木) 00:34:12その筋質問箱は付いてますか?
0383名無しさん@お腹いっぱい。
2007/04/26(木) 04:36:490384名無しさん@お腹いっぱい。
2007/04/26(木) 10:22:570385名無しさん@お腹いっぱい。
2007/05/02(水) 17:38:53どうすればよいのでしょうか?
sedだと只それだけで一文字目の後ろに改行を挿入してホールドスペースに入れて、
y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/ てなことして
また連結して改行を削除みたいな、バカ手間が掛かるので投げ出してしまった。
もっと簡潔に出来たら良いなと思うのですが・・・
0386名無しさん@お腹いっぱい。
2007/05/02(水) 17:42:25echo aaa | sed 's/\(.\)/\U\1/'
0388385
2007/05/02(水) 18:42:47しかし、なんでもコマンドを高機能なやつに入れ替えるのもどうかと思うし、
使っているOSがGNUツール群を標準装備していないのもそれなりに理由があるだろうし
高々文字列変換で新たなツールを使うのには、消極的になりますね。
0389名無しさん@お腹いっぱい。
2007/05/02(水) 19:11:07echo "abc" | perl -pe 's/(.)/\U\1/'
0390名無しさん@お腹いっぱい。
2007/05/02(水) 19:18:210391385
2007/05/02(水) 20:06:42有り難うございます。
awkのsubstrで文字位置指定して、toupperで大文字に変換ということですね。
perlの方はgsedと互換な感じの構文ですね。(てかgsedが模倣した?)
>>390
済みません。
awk: illegal statement
input record number 1, file
source line number 1
と成ります。
いずれにしてもいろいろと勉強になります。
>>386,>>389,>>390の皆さん、ありがとうございました!
0392名無しさん@お腹いっぱい。
2007/05/03(木) 02:41:58互換性維持のためなんだろうけど。
0393名無しさん@お腹いっぱい。
2007/05/03(木) 09:18:45emacsのCTRLキーはめんどい。
エロい人、設定のしかた教えてチョ。
0394名無しさん@お腹いっぱい。
2007/05/03(木) 10:08:20くだらない質問はここに書き込め!Part 52
http://pc11.2ch.net/test/read.cgi/unix/1176049968/
0395名無しさん@お腹いっぱい。
2007/05/03(木) 18:24:22bashつかえw
0396名無しさん@お腹いっぱい。
2007/05/04(金) 16:26:20例:「aaa bbb ccc ...」
各ワードに接頭辞と接尾辞を付加したいが、sedでできるかな?
例:「prefix.aaa.postfix prefix.bbb.postfix prefix.ccc.postfix ...」
ちなみにワード数は不定。
置換後の文字列長はLINE_MAX以下でないと駄目?
0397名無しさん@お腹いっぱい。
2007/05/04(金) 16:44:540398名無しさん@お腹いっぱい。
2007/05/04(金) 16:56:59$ s="aaa bbb ccc"
$ echo $s | sed -e 's/\([^ ]*\)/prefix.\1.postfix/g'
prefix.aaa.postfix prefix.bbb.postfix prefix.ccc.postfix
0399名無しさん@お腹いっぱい。
2007/05/04(金) 23:17:48tex処理を簡単にしたいと考えたのですが、これが分からずにつまっています。
0400名無しさん@お腹いっぱい。
2007/05/05(土) 00:39:090401名無しさん@お腹いっぱい。
2007/05/05(土) 06:17:46$1,$2...って9個までしか使えないんじゃ?
396は「ワード数不定」って言ってるから、10個以上もありうるだろ。
0402名無しさん@お腹いっぱい。
2007/05/05(土) 06:21:090403名無しさん@お腹いっぱい。
2007/05/05(土) 14:01:50アホー
>>400は>>399へのレスだ。
0404名無しさん@お腹いっぱい。
2007/05/05(土) 23:04:16多分、コマンドでこう起動したのと同じ扱いになっている思う。
$ xxx.sh < "abc.tex"
スクリプト側でリダイレクトされる前のファイル名を
取得する方法が分かれば、どうにかなるんじゃないかな。
0405名無しさん@お腹いっぱい。
2007/05/06(日) 01:12:45スクリプ中で使用するコマンド(今回はmogrify)がインストールされているかどうか
調べるのに手っ取り早い方法ありますか?
今のところ思いつくのは、PATHから「:」で区切って1つづつ抜き出し、その直下に
mogrifyがあるか「test -x」する方法です。
0406405
2007/05/06(日) 01:26:07whereis使えばいいか。
whereisって見つからなくても0返すんですね・・・
whereis -b mogrifya | grep -v ':$' > /dev/null
if [ $? ...
って感じかな
もっとスマートな方法ありましたらご教授ください。
0407名無しさん@お腹いっぱい。
2007/05/06(日) 01:47:140408名無しさん@お腹いっぱい。
2007/05/06(日) 02:09:28...
は?
0409名無しさん@お腹いっぱい。
2007/05/06(日) 02:18:36whichか、なるほど
解決しましたありがとうございました。
0410405
2007/05/06(日) 02:45:19&&や||の後に複数のコマンドを書くにはどうすればいいのでしょうか?
見つからなかった場合、NGと表示しexitしたいのですが、
which mogrify > /dev/null 2>&1 && echo 'bc ok' || (echo 'bc NG'; exit 1)
としてもミニシェルから抜けるだけなのです
if文で書けばいいだけなのですが、勉強の意味でも知っておきたいのです。
0411名無しさん@お腹いっぱい。
2007/05/06(日) 03:18:41echo $*
exit
}
とか定義しちゃえば?
0412名無しさん@お腹いっぱい。
2007/05/06(日) 03:28:54... || { echo NG; exit 1; }
は?
0413410
2007/05/06(日) 11:45:38いいですね。たくさんコマンド実行したいときに使わせていただきます。
>412
おー、意図したとおりになりました。今回はこちらを使わせていただきます。
ありがとうございました。
ちなみにcommand1が成功したときはcommand2、失敗したときはcommand3という時に、
command1 && command2 || command3
という書き方は問題ないですか?
動作は意図したとおりなんだけど、「|| command3」はcommand2の結果に
かかってくるように見えるのでちょっと気持ち悪い・・・
0414名無しさん@お腹いっぱい。
2007/05/06(日) 12:35:35>command1 && command2 || command3
>という書き方は問題ないですか?
command2が falseを返した時、command3まで実行されてしまうのが問題。
if - else の代わりにするなら、
command1 && { command2; true; } || { command3; }
と書けば完全。command2や command3は、; で区切って複数コマンド可能。
0415413
2007/05/06(日) 14:40:39なるほど。
command2にはechoとかしか入れてなかったので気づかなかった・・・
勉強になりました。ありがとうございます。
0416名無しさん@お腹いっぱい。
2007/05/11(金) 23:38:51上記コマンドを指定の条件をつけてwhileによる繰り返しでログを整形する
シェルをつくりたいのですが、末尾に">>ファイル名"としても指定のファイル
にリダイレクトできません。
while〜doneの後、シェルスクリプト実行時の末尾に>>を指定してもだめです。
出力は画面のままです。(通常のtail -fのイメージ)
&でバックグラウンドで実行しても同様です。
tail -f で読み取っている内容を別のログファイルに出力するにはどうすれば
よいですか?
0417名無しさん@お腹いっぱい。
2007/05/12(土) 09:13:180418名無しさん@お腹いっぱい。
2007/05/12(土) 10:06:110419名無しさん@お腹いっぱい。
2007/05/14(月) 21:13:310420名無しさん@お腹いっぱい。
2007/05/15(火) 00:34:170421名無しさん@お腹いっぱい。
2007/05/15(火) 17:57:30%68%6F%67%65%68%6F%67%65 のように
%表記に直すにはどうしたらよいでしょうか?
0422名無しさん@お腹いっぱい。
2007/05/15(火) 18:50:160423名無しさん@お腹いっぱい。
2007/05/15(火) 18:50:23よく意味がわからんが、URLエンコーディングとかの話か?
0424名無しさん@お腹いっぱい。
2007/05/15(火) 19:05:07よく意味がわからんなら答えなくていいよ。
0425名無しさん@お腹いっぱい。
2007/05/15(火) 19:25:20s/hoge%68%6F%67%65/%68%6F%67%65%68%6F%67%65/g
0426名無しさん@お腹いっぱい。
2007/05/15(火) 19:27:18できました!! ありがとう!!
0427名無しさん@お腹いっぱい。
2007/05/15(火) 19:28:000428名無しさん@お腹いっぱい。
2007/05/16(水) 01:53:36hogeを%表記しようとしたときに
右側の既に%表記されてる部分が
さらに%表記に変換されてしまうことを
回避したいと思っているのではないかと
0429名無しさん@お腹いっぱい。
2007/05/16(水) 02:00:500430201
2007/05/16(水) 02:03:24と沢山のファイルがあってfor文(じゃなくてもいいけど)により
convert +append 01.jpg 02.jpg 03.jpg out1.jpg
convert +append 04.jpg 05.jpg 06.jpg out2.jpg
...
というように、3つずつ抜き出して一気に処理したいのですが、どうすればいいのでしょうか?
0431名無しさん@お腹いっぱい。
2007/05/16(水) 02:23:41100個ずつとかだと別の方法を使うが、3個ずつならこんなもんか
#!/bin/sh
set -- ??.jpg
i=1
while :; do
case $# in
0) break;;
1) convert +append $1 out$i.jpg; break;;
2) convert +append $1 $2 out$i.jpg; break;;
*) convert +append $1 $2 $3 out$i.jpg; shift; shift; shift; i=`expr $i + 1`;;
esac
done
0432名無しさん@お腹いっぱい。
2007/05/16(水) 02:27:07i=0
while [ $# -gt 0 ]; do
i=`expr i + 1` #式使えるならそれでも。
convert +append $1 $2 $3 out$i.jpg
shift 3
done
shiftの数引数ってBourne Shellでも使えるのかな。
使えないなら3回shift。
0433名無しさん@お腹いっぱい。
2007/05/16(水) 02:27:490434名無しさん@お腹いっぱい。
2007/05/16(水) 02:28:550435名無しさん@お腹いっぱい。
2007/05/16(水) 02:29:550436名無しさん@お腹いっぱい。
2007/05/16(水) 02:37:350437430
2007/05/16(水) 02:45:013の倍数になっていないときは私自身考慮してませんでいした。
431さんの set だけ使ったことがないのですが、とにかく
>431-435 で十分対処できそうです。
setも調べてみます
ホントにありがとうございます。
0438430
2007/05/16(水) 02:46:51とにかくありがとう
0439421
2007/05/16(水) 11:12:47シェルスクリプトで難しいならperlを使ってもかまいません。
>>423
URLエンコーディングならアルファベットはそのままだと思うのですが、
アルファベットも16進数表示したいわけです。
pukiwiki のバックアップをローカルに落とすのに、
ファイル名を知りたいんです。
0440名無しさん@お腹いっぱい。
2007/05/16(水) 11:21:18pukiwikiスレあたりで「戻し方教えれ」って聞いた方がいいんじゃね?
0441416
2007/05/16(水) 23:44:33tail -f ログファイル名 | awk -f 手続きファイル
上記コマンドではawkによる整形結果を標準出力できる状態で、
さらにパイプでteeコマンドを実行してみましたがうまくログが
出力できませんでした。
名前付きパイプを作成し、オリジナルログの出力先を名前つきパイプにして
直接awkで名前つきパイプを標準入力状態にしても、tail -f のような画面に
標準出力はできますがファイルへのリダイレクトは無理でした。
難しいですねぇ。。
0442名無しさん@お腹いっぱい。
2007/05/17(木) 00:48:160443ウサチャソ
2007/05/17(木) 00:52:02tail -f をパイプすると、上手く動かないよ。
GNUのだとどうなんだろ?
「tail パイプ バッファリング」
でググると、それっぽい事いっぱいでてくるYO
0444名無しさん@お腹いっぱい。
2007/05/17(木) 18:41:180445名無しさん@お腹いっぱい。
2007/05/17(木) 18:50:24ない。
. で読む場合は $0もセットされないし。
0446名無しさん@お腹いっぱい。
2007/05/17(木) 19:05:57ありがとうございます。
あらかじめ埋め込んでおくしかなさそうですね…。
0447416
2007/05/17(木) 23:00:53バッファの問題だったんですね。
通常のawkはやめて、gawkのfflush関数を使うことでうまくいきました。
ありがとうございました。
0448名無しさん@お腹いっぱい。
2007/05/18(金) 19:10:57もし良かったら数行のコマンドでレスお願いします。
0449名無しさん@お腹いっぱい。
2007/05/18(金) 19:15:55何をやりたいのかもうちょい詳しく。
0450448
2007/05/18(金) 19:59:201.現在rootでログイン中。
2.testユーザーでログインして何か作業をする。
3.そしてまたrootに戻る。
これを自動化したいです。
0451名無しさん@お腹いっぱい。
2007/05/18(金) 20:03:21su test 何か
もしくは
su - test 何か
違いについては man su 等を参照。
0452名無しさん@お腹いっぱい。
2007/05/18(金) 20:30:15間違ってるよ。man su 等を参照するべきなのはオマエ。
0453名無しさん@お腹いっぱい。
2007/05/18(金) 20:59:46sudoじゃダメなんか?
0454名無しさん@お腹いっぱい。
2007/05/18(金) 21:30:20testユーザで実行するバッチファイルを作っておいて、
su - test -c バッチファイル
で実行しる。
0455名無しさん@お腹いっぱい。
2007/05/18(金) 21:35:19バッチファイル
バッチファイル
バッチファイル
wwww
0456名無しさん@お腹いっぱい。
2007/05/19(土) 00:37:470457448
2007/05/19(土) 03:04:26expectでsu - testとして
touch /home/test.txtを実行して
再度expectでsu - rootでrootになっても
/home/test.txtは作成されてませんでした
なぜでしょう?
0458名無しさん@お腹いっぱい。
2007/05/19(土) 10:21:42/homeにtestユーザは書き込めないんでは。
0459名無しさん@お腹いっぱい。
2007/05/20(日) 04:33:3211.22.33を
33.22.11に文字を反転させたい。
0460459
2007/05/20(日) 04:42:1511.22.33を
a[0]=11
a[1]=22
a[2]=33
のように配列に代入したい。
よろしくお願いします。
0461名無しさん@お腹いっぱい。
2007/05/20(日) 05:39:470462459
2007/05/20(日) 06:19:250463459
2007/05/20(日) 07:14:050464名無しさん@お腹いっぱい。
2007/05/20(日) 21:56:12-----
/usr/local/etc/pussy001.jpg
/usr/local/etc/pussy002.jpg
/usr/local/etc/pussy003.jpg
:
-----
そこに書かれているファイルを指定した場所に移動させたいんです。
で、こんな感じで動くスクリプトを書きたいなぁと考えているんですが
cat list.txt | grep jpg | mv.sh /work/pussy
この mv.sh の書き方が分かりません。
0465名無しさん@お腹いっぱい。
2007/05/20(日) 22:02:27mv `grep jpg list.txt` /work/pussy
で、一発。・・・で、pussyってww
0466名無しさん@お腹いっぱい。
2007/05/20(日) 22:47:23残念ながら、ファイル名にスペースがあるとだめでした。
sh, tcsh, bashで試してみましたが、どれも同じです。
0467名無しさん@お腹いっぱい。
2007/05/20(日) 23:18:02そういう条件は先に例に含めて書くこと。
ファイル名にスペースがある場合のやり方ももちろん知ってるが、
わざわざ教える気にならないので俺はパス。
0468名無しさん@お腹いっぱい。
2007/05/20(日) 23:25:45IFS='
' mv `grep jpg list.txt` /work/pussy
0469名無しさん@お腹いっぱい。
2007/05/21(月) 00:42:01>>467
ファイルの長さを考慮しないgrep戦法しか提示しなかった奴が
そんな理屈をこねても見苦しいだけ。
0470名無しさん@お腹いっぱい。
2007/05/21(月) 06:22:05残念ながら、ファイル名に \ があるとだめでした。
0471名無しさん@お腹いっぱい。
2007/05/21(月) 10:38:530472名無しさん@お腹いっぱい。
2007/05/21(月) 11:09:30ファイル名の \ を考慮しないを考慮しないwhile read戦法しか提示しなかった奴が
そんな理屈をこねても見苦しいだけ。
0473名無しさん@お腹いっぱい。
2007/05/21(月) 11:17:06テストだったら0点。
0474名無しさん@お腹いっぱい。
2007/05/21(月) 11:25:380475名無しさん@お腹いっぱい。
2007/05/21(月) 11:33:370476名無しさん@お腹いっぱい。
2007/05/21(月) 11:37:45質問者のヒントになればいいじゃん。
0477名無しさん@お腹いっぱい。
2007/05/21(月) 16:16:070478464
2007/05/22(火) 00:44:46という訳で >465 >468 >469 全て参考になりました。特にIFS=〜は初めて
知ったので成程と関心しました。
この場をお借りして厚く御礼申し上げます。
0479名無しさん@お腹いっぱい。
2007/05/22(火) 00:59:36grep jpg list.txt | xargs -i mv {} /work/pussy
0480名無しさん@お腹いっぱい。
2007/05/22(火) 12:09:35空白が含まれているとダメだろ。
0481名無しさん@お腹いっぱい。
2007/05/22(火) 14:28:330482名無しさん@お腹いっぱい。
2007/05/22(火) 14:39:38ファイル名に改行が含まれてるとだめだろw
0483名無しさん@お腹いっぱい。
2007/05/22(火) 19:06:130484名無しさん@お腹いっぱい。
2007/05/22(火) 19:18:18改行入りファイル名を考慮するならリストは改行文字以外で区切るべき
だと思う.
0485名無しさん@お腹いっぱい。
2007/05/22(火) 19:20:200486ウサチャソ
2007/05/22(火) 21:00:22% touch aaaa^Maaaa
% ls -lF
aaaa*--r-- 1 ウサチャソ users 0 5月 22 20:58 aaaa
表示バグってるよ…
0487名無しさん@お腹いっぱい。
2007/05/22(火) 21:19:380489名無しさん@お腹いっぱい。
2007/05/22(火) 21:57:27$ touch 'aaaa
aaaa'
だろ。
$ > 'aaaa
aaaa'
でも可。
0490ウサチャソ
2007/05/22(火) 22:14:31ちなみに、>>489 でも >>486 でもCygwinだと同じ表示。
-rw-r--r-- 1 ウサチャソ なし 0 May 22 22:10 aaaa?aaaa
今日始めて知った。
0491ウサチャソ
2007/05/22(火) 22:15:58スレ違いなんでもう消えます、スマソ
0492名無しさん@お腹いっぱい。
2007/05/24(木) 20:33:53lsnrctl >>_EOF_
set log_file listener.tmp
RET=$?
if [ $RET -ne 0 ];then
logger -t loglog -p local1.notice "切り替えに失敗しました"
exit 1
fi
exit
_EOF_
という事をしたいのですがどうしてもsetコマンド以降エラーに
なってしまいます。
対処法を教えていただけないでしょうか?
0493名無しさん@お腹いっぱい。
2007/05/24(木) 20:51:21lsnrctl <<_EOF_
0494名無しさん@お腹いっぱい。
2007/05/24(木) 20:55:160495名無しさん@お腹いっぱい。
2007/05/24(木) 21:23:10やはりLSNRCTLコマンドしか受け付けないですか・・・
う〜ん、どうしてもLSNCTLの中でシェルスクリプトの処理の記述を
したかったのですが無理そうですね。
ありがとうございました。
0496名無しさん@お腹いっぱい。
2007/05/28(月) 07:13:03ファイルの最終から20行を削除したい。
どうしたらいいでしょうか?
0497名無しさん@お腹いっぱい。
2007/05/28(月) 07:46:41wc で数えて、head で切り出すぐらいしか考え付かない
0498名無しさん@お腹いっぱい。
2007/05/28(月) 08:09:270499名無しさん@お腹いっぱい。
2007/05/28(月) 08:33:29cat file | tac | sed '1,20d' | tac
0500名無しさん@お腹いっぱい。
2007/05/28(月) 12:43:490501名無しさん@お腹いっぱい。
2007/05/28(月) 14:05:400502名無しさん@お腹いっぱい。
2007/05/28(月) 15:55:050503名無しさん@お腹いっぱい。
2007/05/28(月) 16:13:35楽しそうだな
0504名無しさん@お腹いっぱい。
2007/05/28(月) 18:27:430505名無しさん@お腹いっぱい。
2007/05/29(火) 00:14:45で、>>499しる
0506名無しさん@お腹いっぱい。
2007/05/29(火) 00:58:130507名無しさん@お腹いっぱい。
2007/05/29(火) 01:26:05awkには入力ファイルの行数を保持する組み込み変数はないんじゃね?
だから、結局wcでカウントしないとダメだったり。
0508名無しさん@お腹いっぱい。
2007/05/29(火) 01:47:08awk '{a[NR]=$0}NR>20{print a[NR-20]}'
0509名無しさん@お腹いっぱい。
2007/05/29(火) 02:37:140510名無しさん@お腹いっぱい。
2007/05/29(火) 02:54:340511名無しさん@お腹いっぱい。
2007/05/29(火) 02:57:150512名無しさん@お腹いっぱい。
2007/05/29(火) 03:15:32は論外。
0513名無しさん@お腹いっぱい。
2007/05/29(火) 09:33:180514名無しさん@お腹いっぱい。
2007/05/29(火) 10:12:43ファイル末尾に到達したら終了させるとか。
0515名無しさん@お腹いっぱい。
2007/05/29(火) 19:07:30書いてみよう
0516名無しさん@お腹いっぱい。
2007/05/29(火) 19:20:43>>513 がやろうとした事(間違ってるがw)
0517名無しさん@お腹いっぱい。
2007/05/29(火) 19:44:45こういう場合、ed を non-interactive に使うのがいい。
最後20行ということは、$-19から $までだから、
echo '$-19,$d
w outfile
q' | ed infile
↑で桶。
0518名無しさん@お腹いっぱい。
2007/05/29(火) 21:46:070519名無しさん@お腹いっぱい。
2007/05/30(水) 08:58:500520名無しさん@お腹いっぱい。
2007/05/30(水) 19:17:11#!/bin/sh -
tmpfile=/tmp/program.$$
cat "$1" | tr ' ' '\n' > tmpfile
while read word
do
grep ${word} "$2" | いろいろと処理・・・
done < tmpfile
てな感じのスクリプトなのですが、
第一引数のファイル中に、例えば -i と言うような語があると
grep がオプションと解釈するのか何なのか、直後に while ループが
終了してしまいます。
'${'"$word"'}' だと grep には ${word} として渡されてしまいます。
何とかシェルを騙して grep に '-i' として渡す方法は無いでしょうか?
(渡す前に条件判断して先頭文字が - なら sed などで先頭に \ を
付加すると言うのも行けそうな気はしますが、出来れば余計なIFとか
変数とか無しで行きたいものです)
0521名無しさん@お腹いっぱい。
2007/05/30(水) 19:35:35grep -
0523名無しさん@お腹いっぱい。
2007/05/30(水) 21:22:55結構な数のコマンドで使える。
0525名無しさん@お腹いっぱい。
2007/06/02(土) 11:43:37インターネットに接続できるか試すコマンドってありますか?
やりたいこと
インターネットに接続できたら echo "できます"
インターネットに接続できなかったら echo "できません"
としたいです。
0526名無しさん@お腹いっぱい。
2007/06/02(土) 11:59:130527名無しさん@お腹いっぱい。
2007/06/02(土) 12:05:24if ping -c 1 www.yahoo.com >/dev/null 2>&1; then
echo "出来ます"
else
echo "出来ません"
fi
0528525
2007/06/03(日) 03:05:39ありがとうございます
できればヤフーなどの特定のサイトに依存せず
確実にインターネットに繋がるかどうか判断したいです。
もし無理なら特定のサイトでも構いませんが
こういう場合通例としてyahoo.comを使うのが適切でしょうか?
0529名無しさん@お腹いっぱい。
2007/06/03(日) 07:09:14その通信相手にすればいいよ。
0530名無しさん@お腹いっぱい。
2007/06/03(日) 07:21:06何が目的なん?
0531名無しさん@お腹いっぱい。
2007/06/03(日) 08:59:25www.yahoo.comとかwww.google.comとか使えばいい。
0532名無しさん@お腹いっぱい。
2007/06/03(日) 11:01:00君のほうから、どことつながったらインターネットに繋がっていると言えるかの
判断基準を出してくれないと先に進めないと思うよ。
0533名無しさん@お腹いっぱい。
2007/06/03(日) 12:04:41ファイアウォールの具合でICMP通らないかもしらんし。
0534名無しさん@お腹いっぱい。
2007/06/03(日) 23:19:330535名無しさん@お腹いっぱい。
2007/06/04(月) 07:59:35>if ping -c 1 www.yahoo.com >/dev/null 2>&1; then
関係ないが、この 2>&1
エラー対策でつか?
0536名無しさん@お腹いっぱい。
2007/06/04(月) 14:12:29tail -r ファイル名| tail +20 | tail -r
でもいけた(tailばっかりでカッコ悪いか)
0537名無しさん@お腹いっぱい。
2007/06/04(月) 21:46:12終了ステータスだけとれりゃいいので、エラーメッセージとか捨てる。
0538名無しさん@お腹いっぱい。
2007/06/04(月) 21:50:180539ウサチャソ
2007/06/04(月) 23:49:23ウホッ
0540名無しさん@お腹いっぱい。
2007/06/04(月) 23:51:56*「アッー!」
0541名無しさん@お腹いっぱい。
2007/06/05(火) 06:33:28以前、gawkでstrftimeを利用して同じ事をしたのですが、今回使ってるサーバのawkは
gawkでない為に別の方法が必要です。
どうもウマイ方法が思いつきませんで・・・ご教示お願いします。
0542名無しさん@お腹いっぱい。
2007/06/05(火) 08:54:12vmstat 1 | perl -MPOSIX -pe 'BEGIN{$|=1} print strftime q{%H:%M:%S }, localtime'
0543名無しさん@お腹いっぱい。
2007/06/05(火) 08:59:20vmstat 1 | while read line; do echo `date +%H:%M:%S` $line; done
0544名無しさん@お腹いっぱい。
2007/06/05(火) 20:13:14DQ I ?
0545541
2007/06/05(火) 22:31:39HP-UX10.20だったのですがperlが入っていませんでした(汗
でも、これを機会にperlもちょっとづつ勉強したいと思います。どもでした。
>>543
readがそんな使い方できるとは知りませんでした。
おかげさまでばっちり動きました。ありがとうございます。
0546名無しさん@お腹いっぱい。
2007/06/05(火) 23:39:38echo hoge | read v
で
echo $V →hoge
になるように読める
で、できないってことはわかったんだけど結局readはどう使うんですか
なんでwhile中だとうまく動くんでしょう
0547名無しさん@お腹いっぱい。
2007/06/06(水) 00:17:57read で代入する変数はサブシェルのものだから、親シェルに戻ると忘れる。
while でなくても、下のような書き方をすれば {...} の中にかぎり有効。
echo hoge | {
read v
echo $v
}
あと、ksh はふつーに可能だったような記憶がうっすらとあるが自信ない。
0548名無しさん@お腹いっぱい。
2007/06/06(水) 15:14:41シェルスクリプトを、windowsでCD-Rに焼き、linuxで実行すると
改行がコマンドとして認識され、command not foundとなってしまいます。
普通に改行を改行として認識させることはできないのでしょうか?
0549名無しさん@お腹いっぱい。
2007/06/06(水) 16:33:410550名無しさん@お腹いっぱい。
2007/06/06(水) 16:52:46ありがとうとざいます
LFで保存したところ大丈夫でした。
ただし1行目だけはなぜかcommand not foundとなってしまう。。
0551名無しさん@お腹いっぱい。
2007/06/06(水) 20:15:14$logを 2007-01-01
という風に、[西暦]-[月]-[日]な形にしたいのですが、どすればよいでしょうか?
どなたか、お力をお貸し下さいませ。
.log と取って、4桁、2桁、2桁ごとに「-」を挟む。というのはわかるのですが
方法や何のコマンド使ってよいものやら見当もつきません。お願いします!
0552名無しさん@お腹いっぱい。
2007/06/06(水) 20:26:090553名無しさん@お腹いっぱい。
2007/06/06(水) 20:30:18sedは使えるつもりでいたんですが、まだまだの若輩者でしたorz
こんなに早く答えて頂いて本当に助かりました。
0554名無しさん@お腹いっぱい。
2007/06/06(水) 23:42:520555名無しさん@お腹いっぱい。
2007/06/06(水) 23:42:59専門用語を交えないで言うと、どういったものなのでしょうか?
0556名無しさん@お腹いっぱい。
2007/06/06(水) 23:44:510557名無しさん@お腹いっぱい。
2007/06/07(木) 00:11:41大分違うな…
0558名無しさん@お腹いっぱい。
2007/06/07(木) 00:35:32専門的な概念なのに専門用語使うなというのは無理な話。
0559名無しさん@お腹いっぱい。
2007/06/07(木) 02:08:21その説明で開眼しました!!
今ならどんなプログラムも書けそうです!!
(^ω^)
0560名無しさん@お腹いっぱい。
2007/06/08(金) 00:50:30then
echo "foo exists."
else
echo "foo does not exist."
fi
これを Solaris 8の bash, cygwinの sh, bashで実行するとOK。
でも Solaris 8の shで実行した時だけ
test: argument expected
と出てしまいます。どうにも分かりません。助けて下さい…
0561名無しさん@お腹いっぱい。
2007/06/08(金) 03:13:50これは外部コマンドのtestも同様。
0562名無しさん@お腹いっぱい。
2007/06/08(金) 06:27:46ダウト。
Solarisの外部コマンド版のtestの実体はkshスクリプトだから、
Solarisでも外部コマンド版のtestには -eオプションがある。
ただし、純正Bourneには -eがないので、使わないこと推奨なのは同意。
[ -f foo ] あたりで代用だな。
0563名無しさん@お腹いっぱい。
2007/06/08(金) 08:29:58たとえば、以下のようなファイルがある。
----------------------------
aaa
bbb
ccc
ddd
eee
fff
ggg
----------------------------
grepコマンドをつかって、
$ grep ddd -a 333
とすると
bbb
ccc
ddd
eee
fff
と表示されるようなやつよ。
0564名無しさん@お腹いっぱい。
2007/06/08(金) 08:45:56-A とか -B とかない?
0565名無しさん@お腹いっぱい。
2007/06/08(金) 10:35:48普通にgrepだけで行けるぞ
grep -A 3 -B 3 'ddd' filename
0566名無しさん@お腹いっぱい。
2007/06/08(金) 10:44:100567名無しさん@お腹いっぱい。
2007/06/08(金) 11:01:46-A がある grep とない grep がある。
それだけ。
0568名無しさん@お腹いっぱい。
2007/06/08(金) 11:02:540569名無しさん@お腹いっぱい。
2007/06/08(金) 11:03:45sedで : より前だけ取り出して
awkにくべて前後の必要な行番号を全部計算して
sort -nuして
sedでsedのコマンドに成形しなおして
sedで抽出。
てゆうか、grepにこだわらずにawk1個の方がめちゃ楽そう。
0570名無しさん@お腹いっぱい。
2007/06/08(金) 11:04:44awkだけだとどうなるの?
0571名無しさん@お腹いっぱい。
2007/06/08(金) 11:29:370572名無しさん@お腹いっぱい。
2007/06/08(金) 11:43:53普通は、prelとかrubyを使う
まあ、perlとかruby使えないから聞いてるんだろうけど
0573名無しさん@お腹いっぱい。
2007/06/08(金) 11:52:15sedやgrepでどうしようかななんて考えてる時間が無駄だよな
perl覚えちゃたほうがいいのにね、これを機会に
0574名無しさん@お腹いっぱい。
2007/06/08(金) 11:55:160575名無しさん@お腹いっぱい。
2007/06/08(金) 12:00:44perlやrubyを使ってもそれは同じじゃないかな。
sed+awkなら
sed -e "$(awk '/pattern/{for (i=-2;i<=2;i++)if(i+NR>=0)print (i+NR) "{p;d;}"}' file|sort -nu)"';d' file
zshでしか試してないのでクォート回りはshだと違うかも知れんが、
だいたいこんな感じで。
0576名無しさん@お腹いっぱい。
2007/06/08(金) 12:19:380577名無しさん@お腹いっぱい。
2007/06/08(金) 12:26:01だってGNU拡張は、ユーザが便利だと思うものを実装して
拡張していったんだから
きっと、>>563みたいなことを、数年前にも同じといってる人が
現れてんだよw
それで拡張されてる
0578名無しさん@お腹いっぱい。
2007/06/08(金) 12:40:490579名無しさん@お腹いっぱい。
2007/06/08(金) 15:54:550580名無しさん@お腹いっぱい。
2007/06/08(金) 16:04:210581名無しさん@お腹いっぱい。
2007/06/08(金) 16:14:46の意味がやっとわかったようでなにより
0582名無しさん@お腹いっぱい。
2007/06/08(金) 16:21:470583名無しさん@お腹いっぱい。
2007/06/08(金) 16:25:280584名無しさん@お腹いっぱい。
2007/06/08(金) 16:29:280585名無しさん@お腹いっぱい。
2007/06/08(金) 17:38:00キーワードを打ち込んで検索させたりはできないものなんでしょうか?
初心者なんで仕組みなどわかりませんので構造上できないものなら教えてください
0586名無しさん@お腹いっぱい。
2007/06/08(金) 17:49:58http://pc11.2ch.net/mac/
0587名無しさん@お腹いっぱい。
2007/06/08(金) 21:02:220588名無しさん@お腹いっぱい。
2007/06/08(金) 22:41:28---hoge.txt---
aaa
bbb
ccc
これを
---hoge.txt---
aaa
ccc
こうしたい。
sed -i "s/bbb//g" hoge.txtだと
---hoge.txt
aaa
ccc
こうなってしまう・・・
0589名無しさん@お腹いっぱい。
2007/06/08(金) 22:49:060590名無しさん@お腹いっぱい。
2007/06/08(金) 23:03:06ありがとうございます!
0591名無しさん@お腹いっぱい。
2007/06/08(金) 23:37:42それに、わざわざBourne Shellに縛ったスレなのに、GNU拡張に依存するのもどうかと思う
ポータビリティも勘案すると、perl使った方がいい
0592名無しさん@お腹いっぱい。
2007/06/09(土) 10:18:520593名無しさん@お腹いっぱい。
2007/06/09(土) 11:53:54モレも-Po がマジ便利だと思う。
0594名無しさん@お腹いっぱい。
2007/06/09(土) 12:23:490595名無しさん@お腹いっぱい。
2007/06/09(土) 12:49:240596名無しさん@お腹いっぱい。
2007/06/09(土) 14:42:530597名無しさん@お腹いっぱい。
2007/06/09(土) 14:54:080598名無しさん@お腹いっぱい。
2007/06/09(土) 15:01:51お行儀悪く書けてしまうのが悩みの種
0599名無しさん@お腹いっぱい。
2007/06/10(日) 01:08:21お行儀悪く書いても心が痛まないのがPerlの長所
0600名無しさん@お腹いっぱい。
2007/06/10(日) 01:10:390601名無しさん@お腹いっぱい。
2007/06/10(日) 22:37:24どうでもいい
0602名無しさん@お腹いっぱい。
2007/06/15(金) 02:31:42研究室で使うためです。
C言語もほとんど知らないので、取っ付きにくく、苦労してます。
今よく分からないのは、シェル変数と環境変数です。
普通に話に出てくるのですが、変数だとは理解してますが、違いが分かりません…
どなたか教えて頂けませんか?
0603名無しさん@お腹いっぱい。
2007/06/15(金) 02:41:57環境変数は(主に)呼び出されたコマンドが使う
それはいいとして、なんでcshかちゃんと確認しろ
csh使う必然性がなければ、shにしとけ
0604名無しさん@お腹いっぱい。
2007/06/15(金) 03:12:03シェル変数はそのシェルのみが使い、
子プロセスに引き継がれない。
0605602
2007/06/16(土) 01:09:53なぜcshなのかと言うと、 今研究室で使われてるのがcshだとしか…
Cで書かれたソースプログラムをcshに渡して、
結果を他のプログラムに渡して……
って感じらしいです。
まだ学部なので、難しいプログラムは書けず、
既成のプログラムの値を変えて走らせたりするようです。
最近の課題が、あるcshの中身を渡され、理解してくるものでしたが、
プログラムの知識が無い自分にはさっぱりというわけです…
0606名無しさん@お腹いっぱい。
2007/06/16(土) 01:58:470607名無しさん@お腹いっぱい。
2007/06/16(土) 03:31:440608名無しさん@お腹いっぱい。
2007/06/16(土) 15:17:350609名無しさん@お腹いっぱい。
2007/06/16(土) 15:47:46cshの中身というのはcshスクリプトという意味か?
0610名無しさん@お腹いっぱい。
2007/06/16(土) 16:11:270611名無しさん@お腹いっぱい。
2007/06/16(土) 16:53:100612名無しさん@お腹いっぱい。
2007/06/16(土) 18:01:050613名無しさん@お腹いっぱい。
2007/06/16(土) 18:02:260614名無しさん@お腹いっぱい。
2007/06/16(土) 19:35:05ファイルの内容が同じものをリストアップする目的で、
対象ファイルのmd5sumを計算したいと考えています。
ただし、ファイルが大きいと時間がかかってしまうので、まずはファイル頭の
512バイトだけでmd5sumしたいです。以下のようなものを書いたのですが、
ファイル数が多い(1000とか)とプロセスの起動がボトルネックになってしまう
ようで、遅いです。
while read -r filename
do
dd if="${filename}" ibs=512 count=1 2> /dev/null | md5sum >> output
done < ${tempfile_prefix}2_filesize_onajiyatu
md5sumに先頭から512バイトだけで計算しろと指示することはできますか?
もしくは何かいい案ありますでしょうか?
0615名無しさん@お腹いっぱい。
2007/06/16(土) 19:45:200616名無しさん@お腹いっぱい。
2007/06/16(土) 19:49:09エロ動画です。
だからでかいのです。
0617名無しさん@お腹いっぱい。
2007/06/16(土) 19:52:32プロセス起動がネックならperlとかpythonとかrubyとか好きなのでやれ。
0618名無しさん@お腹いっぱい。
2007/06/16(土) 19:53:08perl を使う
0619名無しさん@お腹いっぱい。
2007/06/16(土) 20:02:270620名無しさん@お腹いっぱい。
2007/06/16(土) 20:11:47>>619 の通りファイルサイズが手軽だし、もし同じサイズで内容が違うものが
沢山ならファイル中の適当なところをhexdumpでもいいんじゃないの。
0621名無しさん@お腹いっぱい。
2007/06/16(土) 20:37:43>>619,620
>> ${tempfile_prefix}2_filesize_onajiyatu
って書いてあるから、そもそも同じサイズ限定ではないのか?
0622名無しさん@お腹いっぱい。
2007/06/16(土) 20:40:36結構集めまくったね、絵炉動画をw
0623名無しさん@お腹いっぱい。
2007/06/16(土) 21:03:28>617,618
perlか・・・ついに手を出すときが来たか
>619,621
失礼しました。サイズ比較をあらかじめこんなのでやってます。
ls -l "$@" | sed 's/ \+/ /g' | cut -d ' ' -f 5,8 > ${tempfile_prefix}1_filesize_all
awk '{ if(a[$1,0]==0){a[$1,0]=1;a[$1,1]=$0;} else{if(a[$1,0]==1){print a[$1,1];} a[$1,0]++;print $0;} }' \
${tempfile_prefix}1_filesize_all > ${tempfile_prefix}2_filesize_onajiyatu
>620
ためしに512byteのgomi.txtを作ってみて、以下試しました。
%time (for i in `seq 1 1000`; do cat gomi.txt > /dev/null 2>&1 ; done;)
-> 1.486sec
%time (for i in `seq 1 1000`; do md5sum gomi.txt > /dev/null 2>&1 ; done;)
-> 1.510sec
これくらいのサイズだと処理内容はあまり影響なさそうです。
md5sumの方が比較しやすかったのです。
>622
いやいや、得ろ動画とか1000個とか例えばの話ですよw
0624名無しさん@お腹いっぱい。
2007/06/17(日) 00:32:06まずは、ファイルサイズではじいたら?
0625名無しさん@お腹いっぱい。
2007/06/17(日) 00:34:24忘れてくれ
0626名無しさん@お腹いっぱい。
2007/06/17(日) 03:14:210627名無しさん@お腹いっぱい。
2007/06/17(日) 04:00:08$ time (for f in tmp/*; do dd if=$f bs=512 count=1 2>/dev/null | md5sum; done)
065d30715dcffa21596406373a9124ac -
...中略...
ed4cf7b8f209f9ce630b5e76219357ae -
(; for f in Desktop/*(.); do; dd if=$f bs=512 count=1 2> /dev/null | md5sum; ) 0.09s user 0.38s system 49% cpu 0.960 total
$ time perl -M'Digest::MD5(md5_hex)' -e 'for (@ARGV) { open F,"<$_"; read F,$a,512; print md5_hex($a),"¥n" }' tmp/*
065d30715dcffa21596406373a9124ac
...中略...
ed4cf7b8f209f9ce630b5e76219357ae
perl -M'Digest::MD5(md5_hex)' -e Desktop/*(.) 0.02s user 0.02s system 18% cpu 0.193 total
0628名無しさん@お腹いっぱい。
2007/06/17(日) 17:51:500629名無しさん@お腹いっぱい。
2007/06/17(日) 20:19:20ことが多いため、xargsは全く持って不適当。
0630名無しさん@お腹いっぱい。
2007/06/17(日) 21:13:28まxargsのほうがもっと不適当なのだろうが
0631名無しさん@お腹いっぱい。
2007/06/17(日) 21:16:22man xargs
0632名無しさん@お腹いっぱい。
2007/06/17(日) 21:24:090633名無しさん@お腹いっぱい。
2007/06/17(日) 21:26:16$ ssh solarishost man xargs
0634名無しさん@お腹いっぱい。
2007/06/17(日) 21:33:38だから、xargs使ったところでプロセス起動数は節約できない。
よって、>>626 >>628 は全く的はずれ。
0635名無しさん@お腹いっぱい。
2007/06/17(日) 21:34:10はずしているのはお前の方。
find 〜 -print0 | xargs --null
0636名無しさん@お腹いっぱい。
2007/06/17(日) 21:47:33はずしているのはお前の方。
-print0 や xargs --null は、一般には使えない。(たとえばSolaris)
あと、>>634 が指摘してるように、今回の件は xargsでは解決しない。
よって、そういう意味でも外しているのは >>635 の方。
0637名無しさん@お腹いっぱい。
2007/06/17(日) 22:10:53現代人はふつー find ... -exec ... +
0638名無しさん@お腹いっぱい。
2007/06/17(日) 22:21:020639名無しさん@お腹いっぱい。
2007/06/17(日) 23:03:19ファイル名の取得からハッシュの計算までやるようなアプリ作ればい
いじゃん。
0640名無しさん@お腹いっぱい。
2007/06/17(日) 23:14:550641名無しさん@お腹いっぱい。
2007/06/18(月) 00:13:310642名無しさん@お腹いっぱい。
2007/06/18(月) 00:36:28横レスだが知らなかった
ってか手元のmanにはない
0643名無しさん@お腹いっぱい。
2007/06/18(月) 03:34:110644名無しさん@お腹いっぱい。
2007/06/18(月) 08:19:20工夫されていると聞いたことがある。
これは事実?
0645名無しさん@お腹いっぱい。
2007/06/18(月) 15:14:11bashで、シェル変数に値を突っ込み -zで存在を確認する手法ですが、
if [ -z $test ] ; then
echo "val exist"
else
echo "val isn't exist"
質問
1.[ -z $test ] と書くのはよろしくない?
2.[ -e $test ] とすると、シェル変数が存在しない時に真、
シェル変数が存在する時に偽となるのはなぜ?
結構、このパターンで利用してたのですが、2.の動作を確認すると、
なぜだか逆になっているような。じゃ、-zもよろしくないのかなぁ、と
ところで、みなさんは、環境変数やシェル変数の存在確認をどうやってますか?
宜しくお願いします。
0646名無しさん@お腹いっぱい。
2007/06/18(月) 15:23:43まず、[ ] の中ではシェル変数は基本的にダブルクォートを付けること。
[ -z "$test" ] とする。この場合、$testがセットされていれば偽になる。
これだと真偽が逆になってわかりにくいので、
[ -n "$test" ] または -n は省略できるので [ "$test" ] とする。
[ -e $test ] は、$testがセットされていない時、[ -e ] となってしまい、
これは、"-e" という文字列がサイズゼロかどうか(この場合は2バイト)という
判定がなされるため、$testがセットされていないと真になる。
一方、$testがセットされていると、今度は -e は -eオプションとして解釈され、
$testの中身がファイル名とみなされるため、そんなファイルがなければ偽になる。
更に言うと、-e は Bourne shでは使えないため非推奨。
0647名無しさん@お腹いっぱい。
2007/06/18(月) 15:39:39ありがとうございます。
うーーん、なるほど。1行目でよく分かりました。
0648名無しさん@お腹いっぱい。
2007/06/18(月) 16:11:120649名無しさん@お腹いっぱい。
2007/06/18(月) 16:12:070650名無しさん@お腹いっぱい。
2007/06/18(月) 16:24:47舌足らずですみません。
1行目で自分の間違いを気付き、
詳しい説明をしていただいたので助かりました、と書きたかったところでした。
-eオプションの非推奨コメントは特に助かります。
0651名無しさん@お腹いっぱい。
2007/06/18(月) 21:09:56/ )))
/ /// /―――-ミ
/ 彡彡 // / ヽ))
/ 彡彡 iiiiiiiiiiiiiii iiiiiiiiii|
/ 彡彡 < ・ > 、<・ >l
/ | ヽ 〉
/ ( | | __) | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
/ | ≡ /, ――― |ゝ < 馬鹿共にshellを与えるな!
/ | | L ___」 l ヾ \_________
_ミ l ______ノ ゞ_
| l ヾ ー / | l
| | \ー ‐/ | |
0652名無しさん@お腹いっぱい。
2007/06/19(火) 08:10:33>>更に言うと、-e は Bourne shでは使えないため非推奨。
?????
0653名無しさん@お腹いっぱい。
2007/06/19(火) 08:30:50教えて欲しいんなら「???」じゃなくて、ちゃんと日本語で書け。初心者君。
0654名無しさん@お腹いっぱい。
2007/06/19(火) 09:19:430655名無しさん@お腹いっぱい。
2007/06/19(火) 09:36:140656名無しさん@お腹いっぱい。
2007/06/19(火) 11:36:15今では使われていないOSばかりですね。じゃあ、-e使ってもいいですねw
0657名無しさん@お腹いっぱい。
2007/06/19(火) 11:45:450658名無しさん@お腹いっぱい。
2007/06/19(火) 13:41:51では日本語で書かせていただきます。
私が学習に使用している O'REILLY の「詳解シェルスクリプト」によりますと、
/bin/sh 組込の test コマンドに於ける -e 表現は標準的なものとして記述され
POSIX で定義している旨明記されております。また更に今回の議題の発端である
>>645 質問子の環境と共通する bash 等での独自の拡張に付いて記述した件では、
条件判定構文中の -a 演算子について(非推奨です。 -e を使いましょう)
とまで明記されているものを、使用者の環境の多用性や使用目的の別など勘案せず
一言の下に「非推奨」と断定できる根拠を教えてください。 お願いします。
0660名無しさん@お腹いっぱい。
2007/06/19(火) 13:51:15POSIXは理想論ばかりで、現実に即してないんだよ。
いくらPOSIXでどうこう言っても、実際に動くかどうかがすべて。
test -e については、Solarisの/bin/shで動かないんだから、
OS共通のシェルスクリプトでは非推奨であるのは当然。
あと、別件で、-e の意味で -aを使ってはいけない(非推奨)なのはその通りだよ。
-a は別に ANDの演算子の意味があって、そちらの意味で使うべきだからね。
わかったら、今後は -e を使うなよ。今まで書いたシェルスクリプトで
-e を使ってるのがあったら、気づき次第直しとけよ。
0661658
2007/06/19(火) 14:12:59>>わかったら、今後は -e を使うなよ。今まで書いたシェルスクリプトで
-e を使ってるのがあったら、気づき次第直しとけよ。
ご心配有り難うございます。
そもそも機能が曖昧過ぎて過ぎて使おうと思ったことも御座いませんw
0662名無しさん@お腹いっぱい。
2007/06/19(火) 14:15:20むだに波風立てんなよ。
0663名無しさん@お腹いっぱい。
2007/06/19(火) 22:13:270664名無しさん@お腹いっぱい。
2007/06/19(火) 23:22:070665名無しさん@お腹いっぱい。
2007/06/19(火) 23:28:40export LANG=C とか書いてるのを見ると反応してしまうのは互換性過敏症ですか?
0666名無しさん@お腹いっぱい。
2007/06/19(火) 23:56:180667名無しさん@お腹いっぱい。
2007/06/20(水) 00:19:14SunOS 3.5世代の俺なんかまだまだ甘ちゃんだ。
0668名無しさん@お腹いっぱい。
2007/06/20(水) 05:31:28それぞUNIXの面白さの真髄だわ
0669名無しさん@お腹いっぱい。
2007/06/20(水) 09:12:110670名無しさん@お腹いっぱい。
2007/06/20(水) 21:45:49現実がバラバラだから標準化が必要という理念が生まれたわけですわな。
で、各プラットフォームでそれぞれ POSIX に準拠する姿勢を示していながら
どうしても譲れない仕様への拘りがあるから未だに移植性の問題が取沙汰される。
そこの処の理を語らずに、只単に○○では使える or 使えないという議論に
終始するというのは如何にも思慮が浅いと言わざるを得まい。
0671名無しさん@お腹いっぱい。
2007/06/20(水) 22:08:390672名無しさん@お腹いっぱい。
2007/06/20(水) 23:20:26いまだに携帯電話つかわないもうろくジジイとかいるかなw
0673名無しさん@お腹いっぱい。
2007/06/21(木) 01:34:390674名無しさん@お腹いっぱい。
2007/06/21(木) 01:36:560675名無しさん@お腹いっぱい。
2007/06/21(木) 01:38:490676名無しさん@お腹いっぱい。
2007/06/21(木) 01:53:540677名無しさん@お腹いっぱい。
2007/06/21(木) 03:01:350678名無しさん@お腹いっぱい。
2007/06/21(木) 23:19:43こだわりなんかないだろ、準拠するのが面倒なだけだよ。
準拠したからって売れ行きがたいして変わるわけでもないし。
>>675
院内では携帯は使わないけど緊急呼び出しが頻繁にあるような
医者もいるからなぁ。
パイロットは仕事中は使わないけど、そういう意味なら電車の
運転手なんかも同じだな。
て言うか、仕事中とか会社の中に限定すると携帯持たない/持て
ない奴はそれなりにいるし。
0679名無しさん@お腹いっぱい。
2007/06/22(金) 00:04:290680名無しさん@お腹いっぱい。
2007/06/22(金) 09:16:460681名無しさん@お腹いっぱい。
2007/06/22(金) 20:12:440682名無しさん@お腹いっぱい。
2007/06/22(金) 20:59:200683名無しさん@お腹いっぱい。
2007/06/22(金) 23:11:19>>準拠したからって売れ行きがたいして変わるわけでもないし。
売行きが変わらないからって騒ぐこともないでしょ。
拘りがなければ準拠する方がはるかに楽なのにねぇ
あくまで /bin/sh 標準なのは基本であって、実勢はケースバイケースで、
linux じゃ bash 標準だろうし、 solaris だって適宜 ksh なり使うだろうし、
パーソナルユースや $HOME/bin 限定使用とか、管理者でも同一プラット
ホームだけでの運用が多く、移植性のプライオリティーがさほど高くない
現況において、やいのやいのいう奴は要するに「言いたいだけ」ちゃうんかと。
0684名無しさん@お腹いっぱい。
2007/06/22(金) 23:53:48何が楽なのか詳しく書いて欲しいんだが。
商用ソフトってちょっと変えると、検証がスゲー大変なことぐらいは知ってるよな?
0685名無しさん@お腹いっぱい。
2007/06/23(土) 00:08:17http://sed.sourceforge.net/sed1line.txt
http://www.student.northpark.edu/pemente/awk/awk1line.txt
組込みで使っているLinuxにgrepが入ってなくて
sedでシミュレートしたスクリプト書いたんだけど、
それ以上のことがいろいろできそうな感じなり。
おまけ
http://www.fepus.net/ruby1line.txt
0686名無しさん@お腹いっぱい。
2007/06/23(土) 00:11:08Solarisは古いshとkshを選択できるからいいけど、
HP-UXとかAIXは/bin/shはkshそのもなんで選択の余地はない。
シェルごときで移植性とか言ってるアホが多いっていうのは同意。
0687名無しさん@お腹いっぱい。
2007/06/23(土) 03:31:470688名無しさん@お腹いっぱい。
2007/06/23(土) 08:31:290689名無しさん@お腹いっぱい。
2007/06/23(土) 09:38:27コマンドにも完全な互換性がない以上、シェルスクリプトの互換性や移植性を気にし過ぎるのはアホ。
ささっと書いてテストして動きが変だったら、そのとき直せばいい。
シェルってそういうライトな使い方をするためのものでしょ。
0690名無しさん@お腹いっぱい。
2007/06/23(土) 10:04:55[ -e file ] とか、export HOGE=hoge とか書いて、
「動いたからOK」とか言ってる香具師の方がアフォに見えるけどな。
0691名無しさん@お腹いっぱい。
2007/06/23(土) 10:28:190692名無しさん@お腹いっぱい。
2007/06/23(土) 10:32:040693名無しさん@お腹いっぱい。
2007/06/23(土) 11:05:10>>690
0694名無しさん@お腹いっぱい。
2007/06/23(土) 11:08:340695名無しさん@お腹いっぱい。
2007/06/23(土) 12:54:510696名無しさん@お腹いっぱい。
2007/06/23(土) 13:08:14あるいは環境が一部不明な場合か。
ただ、知識としてはあれば有効だろうが
0697名無しさん@お腹いっぱい。
2007/06/23(土) 14:23:00いつのまにかそんな制約はなくなってしまうものなのだよ。
ニートにはわからないだろうが。
0698名無しさん@お腹いっぱい。
2007/06/23(土) 14:53:170699名無しさん@お腹いっぱい。
2007/06/23(土) 15:16:00「全ての」と「存在する」の違いを未だ習ってないのかい? ぼーや
0700名無しさん@お腹いっぱい。
2007/06/23(土) 15:20:19Perlを使うようになりますた
0701名無しさん@お腹いっぱい。
2007/06/23(土) 16:25:180702名無しさん@お腹いっぱい。
2007/06/23(土) 16:36:580703名無しさん@お腹いっぱい。
2007/06/23(土) 16:55:08だがそうした標準は、POSIX(Portable Operating System Interface)のように
一般的過ぎて役に立たないか、あるいはUNIX戦争として知られる
Open Software Foundation対UNIX Internationalの企業連合間抗争に
巻き込まれるかだった。
0704名無しさん@お腹いっぱい。
2007/06/23(土) 17:09:49プログラムがあるといいと思います!
0705名無しさん@お腹いっぱい。
2007/06/23(土) 17:11:110706名無しさん@お腹いっぱい。
2007/06/23(土) 20:29:52寡聞にして知らないなあ。
0707名無しさん@お腹いっぱい。
2007/06/23(土) 20:33:44つ dash #まあ呼び出したコマンドの互換性まではチェックできないわけだが・・・
0708名無しさん@お腹いっぱい。
2007/06/23(土) 20:36:480709名無しさん@お腹いっぱい。
2007/06/24(日) 05:17:26/bin/shを永久欠番化すれば解決
0710名無しさん@お腹いっぱい。
2007/06/25(月) 02:26:09互換性を述べている人は割とバランスの取れたUNIX流の解釈だと思うぞ
0711名無しさん@お腹いっぱい。
2007/06/25(月) 03:02:50varとかetcとか
システム変えることになったらどうせテンヤワンヤだ
0712名無しさん@お腹いっぱい。
2007/06/25(月) 05:49:560713名無しさん@お腹いっぱい。
2007/06/25(月) 23:17:51素直に自分よりの解釈だと言えば?
0714名無しさん@お腹いっぱい。
2007/06/25(月) 23:43:08>>517のedのヤツはもっと凄いな。
オレもed好きになろう。
0715名無しさん@お腹いっぱい。
2007/06/26(火) 15:37:000716名無しさん@お腹いっぱい。
2007/06/26(火) 15:40:11edでやってたな
0717名無しさん@お腹いっぱい。
2007/06/26(火) 15:40:12edより先におまえが日本語をうまく扱えるようになる必要がありそうだ
0718名無しさん@お腹いっぱい。
2007/06/26(火) 15:44:410719名無しさん@お腹いっぱい。
2007/06/26(火) 21:37:41シェルスクリプトって、基本的に ash と ksh と bash で動けば
移植性で問題になることは極めて低いよね?
この三つで動いても駄目な環境って今どれほど実運用されているのだろうか?
0720名無しさん@お腹いっぱい。
2007/06/26(火) 23:39:23Solarisが問題だな。Solarisにはkshが標準で付いてるとは言え、
シングルユーザモードでは使えない。
シングルユーザモードを含めたシステムスクリプトは依然、
/bin/shか/sbin/sh(単にstatic linkというだけで中身は/bin/shと同じ)の
範囲内で書く必要がある。
誰かが書いてたように、Solarisが無くなる(もしくは影響力が無くなる)なら、
シェルの互換性の問題は一気に解決するだろう。
0721名無しさん@お腹いっぱい。
2007/06/27(水) 00:25:59/usr/binの中には/bin/kshで書かれたコマンドもけっこうある。
Solarisのshの動きがヘンなのはたしかにときどきちょっと困る。
0722名無しさん@お腹いっぱい。
2007/06/27(水) 00:42:18マジで?
0723名無しさん@お腹いっぱい。
2007/06/27(水) 00:46:28> シングルユーザモードでは使えない。
> シングルユーザモードでは使えない。
0724名無しさん@お腹いっぱい。
2007/06/27(水) 00:50:42マジだよ。/sbinは別れてるけど。
>>720は/usrがマウントできない状況のことを言ってるんだと思うけど最近は/と/usrを分けないのもふつうなんじゃないかな。
0725名無しさん@お腹いっぱい。
2007/06/27(水) 00:53:11ふつースクリプトは#!/bin/shで書くけど/bin/shが何だかわかんねーじゃん?
って話では?
0726名無しさん@お腹いっぱい。
2007/06/27(水) 02:29:26HP-UXもだな。
0727名無しさん@お腹いっぱい。
2007/06/27(水) 02:31:28Solarisの/bin/shはそれこそSystemV7のころのものとほとんど変わっていない。
0728名無しさん@お腹いっぱい。
2007/06/27(水) 03:37:470729名無しさん@お腹いっぱい。
2007/06/27(水) 07:44:21じゃなくて、シングルユーザーモードの時、
/sbin/shはあるが、
/sbin/kshは無い。
/sbin/shはstatic linkの/bin/sh(/usr/bin/sh)
だから、シングルユーザーモードも含めれば、
結局 /bin/shの文法の範囲で書かざるを得ないという話。
しかも、Solarisの/bin/shは古いままなので、
export a=b も、$(command)も test -e も、
ちょっと新しい書き方はすべて使えない。
0730名無しさん@お腹いっぱい。
2007/06/27(水) 08:03:47一部のスクリプトで、未だに
${1+"$@"} って書いてあるのがある。
これ、もう "$@" でいいんじゃないか?
引数が0個の時に ""が残らないようにする措置だろうけど、
Solarisの/bin/shですらそんな不具合は発生しない。(確認済み)
なので、"$@"と書いて問題ないし、視認性上も "$@"と書くべきと思うんだが。
本当に ${1+"$@"}と書く必要がある /bin/shを搭載したOSって、
現存してる?
0731名無しさん@お腹いっぱい。
2007/06/27(水) 22:07:07なんか Solaris のシングルユーザモードって不便そうですね。
CD 6枚焼いたけど、インストールを躊躇してしまうよ。
0732名無しさん@お腹いっぱい。
2007/06/27(水) 22:19:420733名無しさん@お腹いっぱい。
2007/06/27(水) 23:07:41なるほどねぇ、知らんかったよ。ありがと。
>>730
書き換えるのが面倒なだけなんじゃないか?
目障りだと思うなら、君が片っ端から書き換えて動作検証してあげればいいと思う。
0734名無しさん@お腹いっぱい。
2007/06/27(水) 23:19:19すんません BSD ユーザなもので、 / と /usr を分けるというのが
イマイチ良く解かりません。
ad0s1a に全部突っ込めって事ですか?
/var も /tmp も含めて・・・(よーするに swap 以外は同じパーテーション?)
Solaris だとそんなの有りなんだぁ。(BSDでも無いことは無いけど、なんだか・・)
0735名無しさん@お腹いっぱい。
2007/06/27(水) 23:36:430736名無しさん@お腹いっぱい。
2007/06/27(水) 23:43:05でも、その好みの問題に対して Solaris はシングルユーザモードの
挙動をもってして、ユーザに介入してくる分けでしょう?
>>732 のレスからは、そういう風に読めるのだが?
0737名無しさん@お腹いっぱい。
2007/06/28(木) 00:09:080738名無しさん@お腹いっぱい。
2007/06/28(木) 05:10:23>>730 の ${1+"$@"} てどうゆう意味なの??
なんか理解できん・・・(TT
0739名無しさん@お腹いっぱい。
2007/06/28(木) 05:18:04NetBSDのデフォルトは分けないからBSDユーザーってのは言い訳にならない。
0740名無しさん@お腹いっぱい。
2007/06/28(木) 07:33:15if [ X$HOGE = X ]
なんてのも見かける。これも、
if [ "$HOGE" = '' ]
と書いたほうがいい。
むかーしのバージョンのtestで、$HOGEの内容が = だったような場合、
[ = = '' ] みたいになるとエラーになるtestに対する対処として、
X$HOGE とかいう回避法があったけど、今の testコマンドでそれが必要なのは
もう現存しないはず。
0741名無しさん@お腹いっぱい。
2007/06/28(木) 14:01:16ちがう。
$HOGE の内容が -f だったような場合に対する対処だから、今でも有効。
0742名無しさん@お腹いっぱい。
2007/06/28(木) 14:16:42$HOGE の内容が -f でも正常に動くんだけど。
[ -f = hoge ] みたいに、項が3つある時は、
-fはファイル存在オプションとはみなされないから
-f だった時駄目になるような/bin/sh搭載した OSって 何?
0743名無しさん@お腹いっぱい。
2007/06/28(木) 14:36:59a="-f"
b="-a"
c="="
d=""
test X"$a" = X"$b" -a X"$c" = X"$d"
echo $?
test $a = $b -a $c = $d
echo $?
FreeBSD の ash、Solaris の sh, ksh、GNU bash いずれでも異なる結果になりました。
0744名無しさん@お腹いっぱい。
2007/06/28(木) 14:39:58それは、複数の式を -a (AND) でつないだ場合の話。
それだと確かに式の評価がおかしくなることがあるが、
[ $HOGE = hoge ] なら、X$HOGE とする必要はなし。
Solarisの/bin/sh でも [ -f = -f ] は無問題。
0745名無しさん@お腹いっぱい。
2007/06/28(木) 14:43:14一律で X$HOGE にしといた方がおしゃれ。
0746名無しさん@お腹いっぱい。
2007/06/28(木) 14:48:53-a 使う場合は、各評価式ごとに \( \) で括るのを推奨。
[ \( "$a" = "$b" \) -a \( "$c" = "$d" \) ]
↑みたいにね。これで、X"$HOGE" は不要。
0747名無しさん@お腹いっぱい。
2007/06/28(木) 14:54:19> [ $HOGE = hoge ] なら、
クォート忘れてる。
> X$HOGE とする必要はなし。
ダウト。
そのへんの対バカ性能をどこまで頑張るかはヒューリスティックで実装依存。
たとえばFreeBSDのtestでは
$ HOGE='!'
$ [ "$HOGE" = hoge ]; echo $?
[: =: unexpected operator
2
となるので変数に任意の値を想定するなら "X$HOGE" = Xhoge は依然必要。
常にtestの引数が正しい式となるよう書くにしくはなし。
0748名無しさん@お腹いっぱい。
2007/06/28(木) 15:06:47>>730 についてはどうお考え?
${1+"$@"} は以前必要? もう不要で "$@"で桶?
0749名無しさん@お腹いっぱい。
2007/06/28(木) 15:09:08どこ使うんだろ。
0750名無しさん@お腹いっぱい。
2007/06/28(木) 17:18:000751名無しさん@お腹いっぱい。
2007/06/28(木) 17:20:300752名無しさん@お腹いっぱい。
2007/06/28(木) 17:25:52case $HOGE in hoge) にするなぁ。
caseだと、たとえ$HOGEの中身が ! だとか -f -a とか特殊記号だったとしても
すべて無問題だから。
0753名無しさん@お腹いっぱい。
2007/06/28(木) 17:31:27詳解シェルスクリプトを企画するか
0754名無しさん@お腹いっぱい。
2007/06/28(木) 17:35:220755名無しさん@お腹いっぱい。
2007/06/28(木) 17:37:220756名無しさん@お腹いっぱい。
2007/06/28(木) 17:38:150757名無しさん@お腹いっぱい。
2007/06/28(木) 17:39:17本売るつもりなら大事でしょ。
0758名無しさん@お腹いっぱい。
2007/06/28(木) 17:40:070759名無しさん@お腹いっぱい。
2007/06/28(木) 17:41:25>>756 が言ってるのは、ユーザーがシェルの互換性に興味あるのか? ってことでは
(需要に興味があるかどうかじゃなく)
0760名無しさん@お腹いっぱい。
2007/06/28(木) 17:49:09何冊くらい売れるんだ?
このスレでも>>4にある本の話なんて全然出ないし。
0761名無しさん@お腹いっぱい。
2007/06/28(木) 17:50:30そういうの読む人がここの話に参加しづいらいだけで。
0762名無しさん@お腹いっぱい。
2007/06/28(木) 17:52:470763名無しさん@お腹いっぱい。
2007/06/28(木) 17:59:17よほど古いシェルじゃない限り互換性ある。でもなぜか出番なくてあまり使わない。
0764名無しさん@お腹いっぱい。
2007/06/28(木) 18:02:34意外に受けたらしいから
0765名無しさん@お腹いっぱい。
2007/06/28(木) 18:11:11使ってるの見たことないコマンドの筆頭が readonly だな。
0766名無しさん@お腹いっぱい。
2007/06/28(木) 18:12:21ありがとうございます。
もうひとつ質問なんですが、ポータブルかつ安全に一時ファイルを作成するにはどうすればいいのでしょうか。
0767名無しさん@お腹いっぱい。
2007/06/28(木) 18:12:31もうこの分野で出ても意味ないわな。
カーニハン&パイクとブルース・ブリンけあればいいんじゃないか。
0768名無しさん@お腹いっぱい。
2007/06/28(木) 18:17:41どこまでの安全性を言ってるのかわからないけど、
(unask 77; > /tmp/hoge$$)
じゃだめかい?
mktempコマンドは、必ずしもあるとは限らないと仮定するべきなのだろうか?
0769名無しさん@お腹いっぱい。
2007/06/28(木) 18:21:56実用上はほとんど問題にならないのでしょうが、気持ち悪いので何か安全な方法があるのかお尋ねしました。
0770名無しさん@お腹いっぱい。
2007/06/28(木) 18:31:34mkdirとかでちゃんとロックして、
失敗したら別の名前で試すとかするしかない。
作るディレクトリのパーミッションちゃんとしとけば
推測されてもかゆくもないでしょ。
0771名無しさん@お腹いっぱい。
2007/06/28(木) 18:49:360772名無しさん@お腹いっぱい。
2007/06/28(木) 19:09:45/dev/urandom はポータブルではないわけで、、
0773名無しさん@お腹いっぱい。
2007/06/28(木) 19:10:47>>771
catが無駄です。
0774名無しさん@お腹いっぱい。
2007/06/28(木) 19:45:410775名無しさん@お腹いっぱい。
2007/06/28(木) 19:53:310776名無しさん@お腹いっぱい。
2007/06/28(木) 20:07:270777名無しさん@お腹いっぱい。
2007/06/28(木) 20:09:050778名無しさん@お腹いっぱい。
2007/06/28(木) 20:13:150779名無しさん@お腹いっぱい。
2007/06/29(金) 01:27:29ていうか、間違いだらけの知識を持ってるやつほどSolarisをバカにする傾向があるな。
0780名無しさん@お腹いっぱい。
2007/06/29(金) 01:33:43Sol10 からね。Sol9 までは static link。
0781名無しさん@お腹いっぱい。
2007/06/29(金) 03:23:19の間違いでした
0782名無しさん@お腹いっぱい。
2007/06/30(土) 16:06:14747じゃないけど "$@" -> ${1+"$@"} とするのは set -u でもエラーにならない為かと
すくなくともある環境では0を除いた位置変数が未設定なら前者はパラメータ未設定エラーになるから
別に""の互換性の理由だけで${1+"$@"}にする訳ではないでしょ
0783782
2007/06/30(土) 16:14:29正) 為でもあるかと
0784名無しさん@お腹いっぱい。
2007/06/30(土) 17:05:31実際に ${1+"$@"} が使われてるのは set -u のところじゃない。
コマンドのラッパーで引数を渡す時の話。
なので、>>782 の話は当たっていない。
0785名無しさん@お腹いっぱい。
2007/06/30(土) 17:10:16空文字列が残らないようにするため。
他に、${@+"$@"} という書き方もある(あった)。
今議論になってるのはそこじゃなくて、
未だに ${1+"$@"} が必要なシェルが現存しているかどうか、
現存しているなら そのOS名は? という質問。
0786名無しさん@お腹いっぱい。
2007/06/30(土) 17:59:27「でもあるかと」と訂正してるんだが
実際 set -u 設定状態でコマンドラッパーに"$@"で渡そうとしても
$@ を評価(展開)する段階で未設定と判定された訳で
空文字列が残るかどうかなんて今時大抵解消されてるでしょ
幾つかのOS、幾つかのB系シェルを触ったことはあるけど個人的には見たことがない
ただ単純に ${1+"$@"} -> "$@" として問題ないか?と聞かれたら
set -u で問題が起きるからダメだと
0787名無しさん@お腹いっぱい。
2007/06/30(土) 18:24:29で、その set -u で問題が出たOSって何?
0788782
2007/06/30(土) 18:25:32もともと空文字列対応で今時 ${1+"$@"} とする必要はあるか?かもしれんが、
たとえその為の対応が不要になったとしても、${1+"$@"} -> "$@" にしていいことにはならんよと言いたい
理由は以下のスクリプトを実行するとエラーになる環境もあるからと
#!/bin/sh
set -u
echo "$@"
0789名無しさん@お腹いっぱい。
2007/06/30(土) 18:29:44だから、そのエラーになる環境は何なのかと。
俺のところの *BSD/Solarisとあと犬で、エラーになるのはひとつもないのだが。
0790名無しさん@お腹いっぱい。
2007/06/30(土) 18:56:23そのSolarisじゃないの? ほんとに試してみた? バージョンによるのかな?
結局互換性の最大の問題はいつもSolarisだなww
0791名無しさん@お腹いっぱい。
2007/06/30(土) 20:36:50いまのSolarisをしらない奴がいてもしょうがない
0792名無しさん@お腹いっぱい。
2007/07/03(火) 01:38:27おそーーーーーーーーいので、あまり使いたくない。
0793名無しさん@お腹いっぱい。
2007/07/03(火) 12:33:550794名無しさん@お腹いっぱい。
2007/07/04(水) 12:36:32時代はmv /bin /ms.green
0795名無しさん@お腹いっぱい。
2007/07/04(水) 22:29:33test 1000000 -lt 9999999999
の結果が正にならないんだけど。数値型の値に制限とかあるのかな?
0796名無しさん@お腹いっぱい。
2007/07/04(水) 22:31:41bashだと無問題。「正」じゃなくて「真(0)」な。
0797名無しさん@お腹いっぱい。
2007/07/04(水) 22:35:060798名無しさん@お腹いっぱい。
2007/07/04(水) 22:35:10実装依存だな。シェルによっては 31bit整数最大の 2147483647 が扱える最大値。
0799名無しさん@お腹いっぱい。
2007/07/04(水) 22:37:55ありがと。ちなみに対処法って何かあったりする?違う言語使うしかないか。
0800名無しさん@お腹いっぱい。
2007/07/04(水) 22:42:13bcに喰わせるとか。bcだともっと大きい数まで扱える。
echo '1000000 < 9999999999' | bc
bcでは、testとは逆で、真の場合1になって、それが標準出力に出る。
0801名無しさん@お腹いっぱい。
2007/07/04(水) 22:55:380802名無しさん@お腹いっぱい。
2007/07/05(木) 22:47:110803名無しさん@お腹いっぱい。
2007/07/05(木) 23:01:130804名無しさん@お腹いっぱい。
2007/07/06(金) 01:13:45(echo obase=2; echo 1.2.3.4 | tr '.' '\012') | bc | xargs -n 1 printf %.8d
0805名無しさん@お腹いっぱい。
2007/07/06(金) 01:23:00旧:(echo obase=2; echo 1.2.3.4 | tr '.' '\012') | bc | xargs -n 1 printf %.8d
新:printf %d%.8d%.8d%.8d `echo obase=2.1.2.3.4 | tr . \; | bc`
0806名無しさん@お腹いっぱい。
2007/07/06(金) 10:00:27tcsh では $ test.sh で動作するのに、
bash では $ test.sh で動作せず、
$ bash -c test.sh でも動作しませんでした。
/usr/local/bin/以下に置いたところ、
bash上の $ test.shは動作しましたが、
やはり、$ bash -c test.sh は動作しません。
この原因は、どのあたりにあるのでしょうか。
ヒントでよいので教えてください。
0807名無しさん@お腹いっぱい。
2007/07/06(金) 10:26:25(t)cshと(ba)sh では、PATHの変数が違う。本当はPATHを通し忘れているというオチ。
あるいは、.bashrcでPATHが再設定されてしまっているとか。
0808806
2007/07/06(金) 10:42:36bash上で、$ set | grep PATH すると、$HOME/binも入っているのですが、
やっぱり、PATH関係っぽいですよねぇ。
$ bash -c test.shができないのが気持ち悪いです。
ちなみに、$ $HOME/bin/test.sh では実行できました。
0809名無しさん@お腹いっぱい。
2007/07/06(金) 10:46:13setじゃなくて、printenvで確認した方がいい。
シェル変数のPATHのみセットされていて、exportされてない可能性がある。
すると、bash -c とかやった時、新しいbashにはPATHが引き継がれないから、
そういう現象が起きる。
0810806
2007/07/06(金) 10:59:27exportされないというのは盲点でした。
おっしゃるとおり、
$ printenv | grep PATH
をしたところ、$HOME/binも含まれていました。
一応、.bashrcでの設定はきいているんですよね。
ググったところ、Cygwin上では、
bashのバグ?かなにかで、bash -c がきかない現象があるようです。
遅くなりましたが、自分の環境は linux 、bash 3.1 です。
0811名無しさん@お腹いっぱい。
2007/07/06(金) 11:09:470812806
2007/07/06(金) 12:10:14席を外していまして、遅くなってすいません。
スクリーンダンプは以下のようなものでよろしいでしょうか。
実はtest.shは、navi2chインライン画像表示のためのシェルスクリプトで引数もとります。
i) bash上で実行
$ bash --verbose -c navi2ch.makethumb http://www.google.co.jp/intl/ja_jp/images/logo.gif
navi2ch.makethumb
$ sh -x navi2ch.makethumb http://www.google.co.jp/intl/ja_jp/images/logo.gif
+ tmp=/tmp/navi2ch-thumbnails
+ origfile=/tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif
+ thumbfile=/tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif.jpg
+ thumbsize=300x150
+ '[' '!' -f /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif ']'
+ '[' -z '' ']'
+ /usr/bin/wget http://www.google.co.jp/intl/ja_jp/images/logo.gif -q -N -x -P /tmp/navi2ch-thumbnails
+ '[' '!' -f /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif.jpg
+ thumbsize=300x150
+ '[' '!' -f /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif ']'
+ '[' -z '' ']'
+ /usr/bin/wget http://www.google.co.jp/intl/ja_jp/images/logo.gif -q -N -x -P /tmp/navi2ch-thumbnails
+ '[' '!' -f /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif ']'
++ identify -format %n /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif
+ scene=1
+ '[' '!' -s /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif.jpg -o /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif.jpg -ot /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif ']'
+ '[' 1 -gt 1 ']'
+ convert -sample 300x150 /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif.jpg
+ echo -n /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif.jpg
/tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif.jpg
0813806
2007/07/06(金) 12:13:07上の方の
$ bash --verbose -c
では、画像は取得されませんでした。
下の方の
$ sh -x
は、画像が取得されました。
0814名無しさん@お腹いっぱい。
2007/07/06(金) 12:18:15フルパス指定じゃだめ?
0815名無しさん@お腹いっぱい。
2007/07/06(金) 12:32:040816名無しさん@お腹いっぱい。
2007/07/06(金) 12:39:22test.shが問題だというから、
ちゃんと問題を切り分けて小さくしてるのかと思ったら、それかよ
.bashrcの中身も、printenv PATH そのものも、隠さず出したら?
0817806
2007/07/06(金) 12:52:00もう一度試したところ、bash上でも
$ navi2ch.makethumb 引数
が実行できました。
しかし、
$ bash -c navi2ch.makethumb 引数
は、やはり実行できませんでした。
>>814
フルパス指定だとbash上でも実行できます。
一応、回避策として、/usr/local/bin/に置いているので、具体的な支障はないのですが、
"bash -c"だけがうまく動いてくれないのはなぜだろうと不思議に思って、質問しました。
だから、本当はこんなにレスしていただくほどのことでなくて、申し訳ないです。
>>815
nkf でチェックしたところ、EUC-JPでした。(環境はja_JP.UTF-8)
cat -v で見ても、改行コードらしきものはありませんでした。
0818名無しさん@お腹いっぱい。
2007/07/06(金) 13:06:23bash -c 'navi2ch.makethumb 引数'
じゃないと駄目だろ
0819806
2007/07/06(金) 13:07:41#!/bin/sh
echo test
のようなシェルスクリプトですと、~/bin/以下に置いて、
$ bash -c test.sh
test
と実行できます。
$ printenv PATH
/home/mona/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games
ふだんbashを使っていないので、~/.bashrcはありものです。
~/.bashrc
PATH=$HOME/bin:$PATH
↑とりあえず、これだけにしました。
これでもやはり、
$ bash -c navi2ch.makethumb http://www.google.co.jp/intl/ja_jp/images/logo.gif
では画像を取得できませんでした。
"bash -c"はいろいろときびしそうですね。
0820806
2007/07/06(金) 13:12:21$ bash -c 'navi2ch.makethumb 引数'
で画像を取得出来ました。
超基本的なことに気付かず、おさわがせして申し訳ないです。
どうもすみませんでした。
ほんとうにごめんなさい。
0821名無しさん@お腹いっぱい。
2007/07/15(日) 17:20:37(sleep $ALIVE_TIME; ps $$ && kill -INT $$; sleep 1; ps $$ && kill -KILL $$)
1秒待ってもう1度だけkillしてるのはなぜなんですかね?
0822名無しさん@お腹いっぱい。
2007/07/15(日) 17:56:03よく見ろ。-INT と -KILL で違うだろ。
0823名無しさん@お腹いっぱい。
2007/07/15(日) 22:02:120824名無しさん@お腹いっぱい。
2007/07/16(月) 22:04:04sedなどを使ってやればできないことはないですが、
if文一発でできればいいなと。。
0825名無しさん@お腹いっぱい。
2007/07/16(月) 22:07:47できない。
正規表現と言ってるが、実際にはワイルドカードで十分なことが多い。
ワイルドカードなら ifの代わりに caseを使えばできる。
0826名無しさん@お腹いっぱい。
2007/07/16(月) 22:08:010827名無しさん@お腹いっぱい。
2007/07/16(月) 22:25:250828名無しさん@お腹いっぱい。
2007/07/16(月) 23:48:40...
0829名無しさん@お腹いっぱい。
2007/07/17(火) 23:10:26機能・性能に問題なきゃそれで充分だろ。
コンピュータ (て言うか、道具) なんて楽するためにあるんだから。
0831名無しさん@お腹いっぱい。
2007/07/22(日) 20:41:39作りたいのですが、実装イメージがまったくわからず困ってします。
Win相手に対してrshは使えないであろうし。。。何かいい方法をご存知の方
いらっしゃいませんか。よろしくお願いいたします。
0832名無しさん@お腹いっぱい。
2007/07/22(日) 20:44:380833名無しさん@お腹いっぱい。
2007/07/22(日) 21:38:16cygwin + sshdとかな。
0834名無しさん@お腹いっぱい。
2007/07/22(日) 23:07:17Windows が 2k / XP なら、telnet でどうぞ。
0835名無しさん@お腹いっぱい。
2007/07/22(日) 23:07:46>Win相手に対してrshは使えないであろうし
使えるよ
http://sohda.net/cygwin/treebbs/treebbs.cgi?kako=1&all=232&s=232
http://www.uhero.info/techinfo/CygwinSSH_setup/index.html
0836824
2007/07/22(日) 23:08:49結局、caseにしときました。
0837831
2007/07/22(日) 23:48:25アドバイスありがとうございます。cygwinについて
あまり知識がないので調べてみます。
>>834
telnetで可能ということは、Win上でtelnetサービスを
稼動させておけばいいということでしょうか?
明日にでも実施してみようと思います。
ありがとうございました。
0838名無しさん@お腹いっぱい。
2007/07/24(火) 01:24:43> 稼動させておけばいいということでしょうか?
手元の 2k だと特にわざわざ入れた覚えはないから、多分
標準で入ってると思う。
サービスの中に telnet ってあるはずだから、それを起動
するだけ。
常用するなら、スタートアップの種別を「自動」にする。
0839名無しさん@お腹いっぱい。
2007/07/24(火) 03:17:550840名無しさん@お腹いっぱい。
2007/07/24(火) 07:39:360841名無しさん@お腹いっぱい。
2007/07/24(火) 21:43:20#!/bin/csh
echo 検索するファイル名を入力してください:
set filename = $<
(find /* -name $filename -type f -print > /dev/tty) > & /dev/null
「hoge.txt」を検索する場合はうまくいくのですが、
ワイルドカードを用いた「hoge\*」の検索をすると検索を行わずに一瞬で終了してしまいます。
setで変数に"\*"を入力するのは不可能なのでしょうか?
0842名無しさん@お腹いっぱい。
2007/07/24(火) 21:45:140843名無しさん@お腹いっぱい。
2007/07/24(火) 21:50:39>>1
0844名無しさん@お腹いっぱい。
2007/07/24(火) 21:52:21クオートすれば?
0845名無しさん@お腹いっぱい。
2007/07/24(火) 22:31:26csh捨てろ。クズ。
0846名無しさん@お腹いっぱい。
2007/07/24(火) 22:34:460847名無しさん@お腹いっぱい。
2007/07/24(火) 22:44:48すんまそん、会社でシェルシェル言ってるもんで癖がついてました。
クオート試してみることにします。
cshは会社の都合なんすよ
0848名無しさん@お腹いっぱい。
2007/07/25(水) 06:21:28最初の行に
sh
と書きゃいいじゃん。
0849名無しさん@お腹いっぱい。
2007/07/25(水) 12:34:58実社会で勉強してね
cshからshに変えるのは容易ではないのだよ
シェルスクリプトは1人で作るのではないし
1つの会社で作るものでもない
0850名無しさん@お腹いっぱい。
2007/07/25(水) 14:06:37いくつもの会社にまたがって何人もの人がよってたかって
>>841みたいなスクリプトを書いているわけだな。すげぇ。
つーか、csh を使うにしてもせめて #!/bin/csh -f にしろよ。
0851名無しさん@お腹いっぱい。
2007/07/25(水) 14:13:50の例は、わざわざcshの欠点が目立つような典型例だな。
ワイルドカードの展開の問題とか、
findのstderrを捨てるために苦労してるところとか。
そもそも、findをインタラクティブに実行させるようなスクリプトは、
システム管理用スクリプトじゃない。初心者ユーザー向けに作ったものだろ。
こんなの、/bin/shで書き直せば一発。
>>841 が抱えているcshでの問題も一気に解決する。
>>849 へ。
みんな実社会で「cshスクリプトは使わない」が常識だといってるんだよ。
>>849 は自分の会社名を公表しない方がいいよ。会社の不名誉になるからね。
0852名無しさん@お腹いっぱい。
2007/07/25(水) 14:15:450853849
2007/07/25(水) 14:57:09ま、会社名を挙げる気は無いけど、
おれんとこでは全部のスクリプトがcshだし
スクリプトの作成・保守を依頼している会社も
cshで作るようになっている。
OSが古いもの・新しいものが混在しているのも
理由ではあるが、
常識など、会社によって違うものだろ。
シェルがダメなのは分かるが、
シェルを変えろとか無理な話だ
0854名無しさん@お腹いっぱい。
2007/07/25(水) 14:59:19実行しても何も起きません。
どうすればよいのでしょうか?
また、linuxのbashみたいに↑↓キーで履歴表示をしたいのですが、
kshで実現可能でしょうか?
0855名無しさん@お腹いっぱい。
2007/07/25(水) 15:07:05> OSが古いもの・新しいものが混在しているのも理由ではあるが、
/bin/shが存在しないUnixなんて無いんじゃないのか
> シェルがダメなのは分かるが、シェルを変えろとか無理な話だ
へえ。cshがダメなのははるか前からの常識なのに、誰もその
やりかたを変えようとせず、変えるのは「無理」だと思ってるんだ。
しかも古いスクリプトだけでなく、新しいスクリプトもわざわざ
cshで書き、ゴミを製造し続けていると。
勿論、C++やJavaやPythonなんて誰も使わないんだろうな。
ソース管理は未だにCVSでさえない、いやソース管理なんて概念もないね?
お前さんがアホなのか、会社がアホなのかは知らないが、実に見事に
アホだな。
0856名無しさん@お腹いっぱい。
2007/07/25(水) 17:35:21そんなに必死に弁解しなくていいよ
0857名無しさん@お腹いっぱい。
2007/07/25(水) 20:55:10だってさ、起動スクリプトとかOSに元々内蔵されてるスクリプトはshだよね?
そういうスクリプトを修正する時も、cshで書き直してるの?
0858名無しさん@お腹いっぱい。
2007/07/25(水) 23:13:350859名無しさん@お腹いっぱい。
2007/07/25(水) 23:54:41おまけに最近スクリプトでsql実行してるのを、「COBOLで実装しろ」って指摘された…
SQLの使い方調査があって、スクリプトが調査範囲から漏れたからだと。
0860名無しさん@お腹いっぱい。
2007/07/26(木) 00:27:56つまりOSインストール時からあるスクリプトも全部cshで書き直してるって事か?
0861名無しさん@お腹いっぱい。
2007/07/26(木) 00:40:110862名無しさん@お腹いっぱい。
2007/07/26(木) 01:32:53なんでcsh使うことになったの?
0863名無しさん@お腹いっぱい。
2007/07/26(木) 04:05:17csh好きな勉強不足の若者の脳内会社なんだから許してやれよw
0864名無しさん@お腹いっぱい。
2007/07/26(木) 10:27:50皆さんがんばってね
0865名無しさん@お腹いっぱい。
2007/07/26(木) 14:51:51cshで書かれたシェルスクリプトがいっぱい付いてくるから
仕方が無い
0866名無しさん@お腹いっぱい。
2007/07/26(木) 14:57:19戻り値チェックするくらいのもんだからな。
0867名無しさん@お腹いっぱい。
2007/07/26(木) 17:05:580868名無しさん@お腹いっぱい。
2007/07/26(木) 18:40:090869名無しさん@お腹いっぱい。
2007/07/27(金) 00:19:380870名無しさん@お腹いっぱい。
2007/07/27(金) 01:30:36俺はシェルスクリプトがないと会社で生きて行けんが。
0871名無しさん@お腹いっぱい。
2007/07/27(金) 02:53:31つ ln /bin/sh /bin/csh
もっといいのは#!起動された時にスクリプトを調べて
昔からのcshスクリプトなら「しょうがなく」csh、じゃなきゃ
shにディスパッチするようにするとか。Linuxなら簡単だな。
0872名無しさん@お腹いっぱい。
2007/07/27(金) 04:33:23*.shのファイルを開いたらbashスクリプトだったなんて事を無くす為なら
cshしか使うなってのもありかも知れん。
0873名無しさん@お腹いっぱい。
2007/07/27(金) 07:10:120874名無しさん@お腹いっぱい。
2007/07/27(金) 08:49:35とかね
0875名無しさん@お腹いっぱい。
2007/07/27(金) 23:08:290876名無しさん@お腹いっぱい。
2007/07/27(金) 23:22:100877名無しさん@お腹いっぱい。
2007/07/27(金) 23:53:59ひ孫請の俺がルールを変えるなんて無理だった。
当然ソース管理なんて概念もない。ファイルはタイムスタンプ
(mtime)で管理してたよ。もー馬鹿かアフォかと。
とりあえず、自分のコードは SCCS で管理してた。
当然フリーソフトウェアなんて得たいの知れないものは
使用禁止。
まだあの会社あるかな…
0878名無しさん@お腹いっぱい。
2007/07/28(土) 00:03:54某システム系大手とか
0879名無しさん@お腹いっぱい。
2007/07/28(土) 01:05:38folder>------folder1---test
|
---folder2---test
folder1内にある実行ファイルtestを実行して、
その終了を待って、folder2内のtestを実行する
というスクリプトを作ったんですが、folder2の実行が行われません。
どこがいけなかったんでしょうか?ご教授ください。
#!/bin/sh
for i in 1 2
do
cd folder$i
nohup test
wait $!
cd ..
done
0880名無しさん@お腹いっぱい。
2007/07/28(土) 01:12:09ほっとけば、終わってからしか次が実行されんだろ?
あと、本当にtestって名前なのか?
/bin/testかビルトインのtestが動いてるだけでは?
0881879
2007/07/28(土) 01:24:56実際は、testっていうプログラムじゃないんですけど、
実行すると1日くらい走り続けるものです。
wait入れなくて実行したら、二重に実行されてしまったので。
二重に走らないようにしたいので、wait入れたのですが。
0882名無しさん@お腹いっぱい。
2007/07/28(土) 01:58:54それで満たせない要件は後だしでくるような気もするけど
0883名無しさん@お腹いっぱい。
2007/07/28(土) 02:20:46waitって子プロセスの終了待つだけなんだから
バックグラウンドで動かさん限り無意味
0884名無しさん@お腹いっぱい。
2007/07/28(土) 03:15:41echo "<tr><td></td></tr>" | awk '{print $1, $2, $3, $4}'
とすると、以下のように分解して代入されるようにしたいのですが、
awkのオプションをどのように指定すればよいでしょうか?
(同じことができるなら、awk以外でも構いません)
$1=<tr>
$2=<td>
$3=</td>
$4=</tr>
よろしくご教授お願いします。
0885名無しさん@お腹いっぱい。
2007/07/28(土) 07:42:410886名無しさん@お腹いっぱい。
2007/07/28(土) 08:52:38この部分は何だ?
0887名無しさん@お腹いっぱい。
2007/07/28(土) 09:32:29<tr><td>< というディレクトリの下に
td>< という子ディレクトリがあって、その下に
tr> というファイルがある。
その内容が
<tr><td></td></tr>
なのだ。
0888名無しさん@お腹いっぱい。
2007/07/28(土) 09:46:100889名無しさん@お腹いっぱい。
2007/07/28(土) 16:48:50なんで echo の中で FS 使っちゃいけないの?
0890名無しさん@お腹いっぱい。
2007/07/28(土) 16:52:400891名無しさん@お腹いっぱい。
2007/08/01(水) 00:31:16do
echo ${f}
done
とか
for s in 'cat hoge.txt'
do
echo ${s}
done
なんかは、基本だな
0892名無しさん@お腹いっぱい。
2007/08/01(水) 01:12:54何が言いたいのかさっぱりわからん。
0893名無しさん@お腹いっぱい。
2007/08/01(水) 02:11:41if [ $numbar = 10 -o $numbar = 11...]
と地道に書いていくしかだめですか?
0894名無しさん@お腹いっぱい。
2007/08/01(水) 02:24:090895名無しさん@お腹いっぱい。
2007/08/01(水) 02:38:29[1-9][0-9]|[1-9][0-9][0-9]|1000)
....
;;
esac
0896名無しさん@お腹いっぱい。
2007/08/01(水) 08:14:470点
0897numbar warota
2007/08/01(水) 21:58:49[ "$number" -ge 10 -a "$number" -le 1000 ]
0898名無しさん@お腹いっぱい。
2007/08/01(水) 22:58:41引っかけ問題に引っかかりましたねぇ。
>>893 の問題では、シェル変数名は number じゃなくて numbar
前任者から引き継いだスクリプトとかで変数名がミススペルで、
自分が正しいスペルで書き足すと動かなくて1日悩むこと、よくあるでしょ?
そのための練習問題でした。
0899名無しさん@お腹いっぱい。
2007/08/01(水) 23:03:02死ぬほどどうでも良いですね。
0900名無しさん@お腹いっぱい。
2007/08/02(木) 20:28:27おまい、100回くらい死ねよ
0901ウサチャソ
2007/08/02(木) 21:08:520902名無しさん@お腹いっぱい。
2007/08/02(木) 21:22:540903名無しさん@お腹いっぱい。
2007/08/02(木) 21:25:200904名無しさん@お腹いっぱい。
2007/08/02(木) 21:41:270905numbar warota
2007/08/02(木) 22:07:37シェルスクリプトごときで1日も迷うねーよ。
それと、From:見る癖つけたほうが良い。
0906名無しさん@お腹いっぱい。
2007/08/03(金) 00:34:20「対話的な利用についての話はスレ違い」ってあるけど、
どこに逝っていいのか教えて頂けないでしょうか〜
expect があることは知ってるけど、
インストールが必要だからダメだって。
とりあえず、どういう選択肢があるか知りたいです。
あと perl の話になるんだけど、
Expect.pm を Makefile.pl とか CPAN での
インストールをしないで(起動ディレクトリにモジュールを置くだけとかで)
起動する方法があれば、誘導をお願いしたいです。
0907名無しさん@お腹いっぱい。
2007/08/03(金) 00:37:46ポエムは確か別の板があったはずだぞ。
0908名無しさん@お腹いっぱい。
2007/08/03(金) 01:12:06ポエム?
なんかアフォ扱いみたいな感じだけど、
変なこと書いてるんかなー? よく分からん。
とりあえず反応ありがと。
0909名無しさん@お腹いっぱい。
2007/08/03(金) 02:14:060910名無しさん@お腹いっぱい。
2007/08/03(金) 02:17:29インストールがダメって言うなら、現行環境に入ってる使えそうな道具立てはなんなのよ?
それとは別に、「対話利用についての話題禁止」の意味をつかめてないに一票
0911名無しさん@お腹いっぱい。
2007/08/03(金) 08:19:15ぐぐってみた。↓に書いてある「対話」?
(例えばどんな話が禁止なのかは分からんが。。)
0からのbash 第1回:対話的シェルの使用法(1) 1.はじめに
http://www.stackasterisk.jp/tech/systemManagement/bash01_01.jsp
>>910
何を書けばいいんだろ。
telnet, ftp, rsh, perl
Expect.pm は上に書いたように
Windows での単体 exe みたいなイメージ
(インストールが必要ない)ならおkらしい
0912名無しさん@お腹いっぱい。
2007/08/03(金) 08:56:320913名無しさん@お腹いっぱい。
2007/08/03(金) 10:30:08やりたいことをできるだけ具体的に
0914名無しさん@お腹いっぱい。
2007/08/03(金) 17:58:16とりあえず初心者がシェルの方を始めるには、どのシェルの方から始めればいいでしょうか?
開発ツールの方とか、デバッガーの方はGUIの方であるんでしょうか?
できればフリーの方を希望します。
0915名無しさん@お腹いっぱい。
2007/08/03(金) 18:11:06> 可能性が発生する恐れがあるかも知れない状況になる兆しが出て来ました。
それぞれ20%と仮定すると、4段階あるから、0.16%だ。
悲観的すぎー
0916名無しさん@お腹いっぱい。
2007/08/03(金) 18:17:25GUI はないと思っていい。
0917名無しさん@お腹いっぱい。
2007/08/03(金) 18:18:590918名無しさん@お腹いっぱい。
2007/08/03(金) 22:35:37sh
0919名無しさん@お腹いっぱい。
2007/08/03(金) 23:10:590920名無しさん@お腹いっぱい。
2007/08/03(金) 23:39:16push(@INC, '/home/hiroyuki')
とかやればモヂュールのサーチパスに追加されるんじゃないの?
0921名無しさん@お腹いっぱい。
2007/08/03(金) 23:40:37お前の語彙が少ないのはどうでも良い。
0922名無しさん@お腹いっぱい。
2007/08/03(金) 23:48:38wishとかwkshとかPowerShellかもしれないじゃないか!
0923名無しさん@お腹いっぱい。
2007/08/04(土) 00:37:18悔しいのか? でもつまらんものはつまらん。
0924名無しさん@お腹いっぱい。
2007/08/04(土) 00:41:13「シェルってゆーな」の人が登場する可能性が発生する恐れがあるかも知れない状況になる兆しが出て来ませんねぇ
0925名無しさん@お腹いっぱい。
2007/08/04(土) 02:19:390926名無しさん@お腹いっぱい。
2007/08/04(土) 07:31:21X 恐れ
◯ 虞れ
0927名無しさん@お腹いっぱい。
2007/08/04(土) 09:22:51それを言うなら、送り仮名が違う
×虞れ
○虞
ただし、「虞」は常用漢字じゃなく、現在では「恐れ」と表記するのが標準。
ぐぐってみても、「○○する恐れ」は多数ヒットするが、「○○する虞」はごくわずか。
0928名無しさん@お腹いっぱい。
2007/08/04(土) 09:34:48お前、センスが皆無な上に致命的に頭悪いな。
> シェルスクリプトをシェルとゆうな。
なので、>>914は(呆れるほどつまらない釣りだが)誤用無し。
0929926
2007/08/04(土) 14:34:15うちのAnthyはそこまでバカじゃない。
送り仮名は「敢えて」俺が書き足した物。
>>ぐぐってみても、「○○する恐れ」は多数ヒットするが、
>>「○○する虞」はごくわずか。
世の中全体が、バカになって来たということですな。
(負の)probabilityをterribleと表記することの
とんでもなさに違和感を感じないとはねぇ・・・
0930名無しさん@お腹いっぱい。
2007/08/04(土) 14:39:54英語でも I'm afraid ... って言うじゃん。
単に可能性だけじゃなく、もしそうだったら困ると言うニュアンスがあるから
「恐れ」で的確。
いいことに対しては確率が低くても「恐れ」とは言わないし。
ちなみに、probabilityは 0 <= probability <= 1 でしか定義できない。
負のprobabilityなんて言ってる時点で、お前数学も苦手だっただろw
0931名無しさん@お腹いっぱい。
2007/08/04(土) 15:26:14930はprobability=(数学的)確率というバカの一つ憶えしかしてないから
早合点したんだろう。蓋然性って日本語知ってるか?
0932名無しさん@お腹いっぱい。
2007/08/04(土) 15:40:52確率を蓋然性と言い替えたところで本質は変わらない。
(数学以外でも)「負の確率」なんて存在しない。
「負の確率」という言葉が出てしまった時点で、アンタの負け。
0933931
2007/08/04(土) 16:15:22日本語も英語もダメな人みたいだね。
0934名無しさん@お腹いっぱい。
2007/08/04(土) 16:18:28それは数学だけじゃなく日本語としてもおかしい。
確率を理解していないことになる。
よって、>>931 のように弁護しても、やはり >>929 は間違い。
0935931
2007/08/04(土) 16:21:390936名無しさん@お腹いっぱい。
2007/08/04(土) 16:22:410937名無しさん@お腹いっぱい。
2007/08/04(土) 16:37:03負の遺産は本当に「負」だろうが。
借金はマイナスの遺産。マイナスだからこそ「負」と言って正しい。
ところが、確率は絶対に「負」にはならない。
負の確率なんて存在しない。
0938名無しさん@お腹いっぱい。
2007/08/04(土) 16:45:18>>936 は別の意味で「負」を理解してないなw
0939名無しさん@お腹いっぱい。
2007/08/04(土) 17:08:590940名無しさん@お腹いっぱい。
2007/08/04(土) 17:17:16借金が負の遺産として一番わかりやすい例ということだろ。
いずれにしても負の遺産はマイナスのものに違いない。
で、「負の遺産」を持ち出しても、「負の確率」を正当化することはできない、
という点は理解してますか?
0941名無しさん@お腹いっぱい。
2007/08/04(土) 17:20:470942名無しさん@お腹いっぱい。
2007/08/04(土) 17:28:35好感度を数値化できるものとする。
平常心での好感度は0で、何かに好感を持った時プラスの好感度になる。
逆に嫌悪感を持てば、マイナスの好感度になる。
マイナスの好感度は「負の感情」と言ってもいい。
だから「負」で正しい。
(だから「負の確率」を肯定する材料にはならない)
0943名無しさん@お腹いっぱい。
2007/08/04(土) 18:37:06別の高尚なスレッドでやってください。
0944名無しさん@お腹いっぱい。
2007/08/04(土) 19:36:54どうせ表現するならエロでやってくれなきゃわからん。
0945名無しさん@お腹いっぱい。
2007/08/04(土) 21:33:50どちらの項目にも「心配する」の意味はある。
広辞苑でも、恐れのほうが虞より先に載っている。
probabilityは見こみで考えたらいいじゃないかな。
0946名無しさん@お腹いっぱい。
2007/08/04(土) 21:54:59邪魔だと言っている。
意味が分からないならお得意の広辞苑を引いてくれ。
0947名無しさん@お腹いっぱい。
2007/08/05(日) 18:41:23お金がないのです
どうしたらいいでしょうか?
0948926
2007/08/05(日) 18:59:36夜勤明けに遊びに行って、帰ってきたらば
この有様w
板違いだけど感受性がおもしろすぎて、嬉しくなるねぇ。
ちなみに(負の)probabilityってのは、
negativeな蓋然性の意味で用いた訳だが・・
あ、あと「マイナスの確率」ってのも
概念的には存在しうるね。
(数学ではなく統計学になるけど
日本語として間違いでは無いよね)
虚数よりは遥に理解しやすい。
0949名無しさん@お腹いっぱい。
2007/08/05(日) 19:53:10土曜に夜勤か。ご苦労さん。
俺は優雅な休日だった。
0950名無しさん@お腹いっぱい。
2007/08/05(日) 23:00:59符号付(確率)測度なんて、数学では大して珍しくも無い概念だが…?
0951名無しさん@お腹いっぱい。
2007/08/06(月) 07:38:000952名無しさん@お腹いっぱい。
2007/08/06(月) 16:33:270953名無しさん@お腹いっぱい。
2007/08/06(月) 20:18:070954名無しさん@お腹いっぱい。
2007/08/06(月) 20:23:110955名無しさん@お腹いっぱい。
2007/08/06(月) 21:15:58×確立
○確率
国語苦手かよw
0956名無しさん@お腹いっぱい。
2007/08/07(火) 00:56:360957名無しさん@お腹いっぱい。
2007/08/08(水) 03:18:10シェルスクリプトというかコマンド一発で
デバイス(eth0とかeth1とか)を出力することってできますか?
もしよかったらコマンド一発でおしえてください。お願いします。
0958名無しさん@お腹いっぱい。
2007/08/08(水) 03:57:050959名無しさん@お腹いっぱい。
2007/08/08(水) 09:44:57くだらねえ質問はここに書き込め! Part 150
http://pc11.2ch.net/test/read.cgi/linux/1185111932/
0960名無しさん@お腹いっぱい。
2007/08/08(水) 09:52:29シェルスクリプトというかコマンド一発で
デバイス(fxp0とかde1とか)を出力することってできますか?
もしよかったらコマンド一発でおしえてください。お願いします。
0961名無しさん@お腹いっぱい。
2007/08/08(水) 10:04:340962名無しさん@お腹いっぱい。
2007/08/08(水) 10:26:35まずはいっぱつやらせろ。話はそれからだ。
0963名無しさん@お腹いっぱい。
2007/08/08(水) 10:50:430964名無しさん@お腹いっぱい。
2007/08/08(水) 16:53:39analyzeってことか
0965名無しさん@お腹いっぱい。
2007/08/08(水) 17:40:370966名無しさん@お腹いっぱい。
2007/08/08(水) 18:08:48お通じ快適ってことか
0967名無しさん@お腹いっぱい。
2007/08/08(水) 21:00:510968名無しさん@お腹いっぱい。
2007/08/09(木) 21:06:16tcsh 6.13.00
たまになんだけど、
cd dir
ls | echo 1
ls | echo 1 ; echo
ってやったあとに
ls
って打つとtcshが固まるのは何故??
バージョンあげれですかそうですか。
0969名無しさん@お腹いっぱい。
2007/08/09(木) 21:10:05それはXenとかCentOSにフィードバックしてあげれば?
スレ違いとか板違いっぽいけど
0970名無しさん@お腹いっぱい。
2007/08/09(木) 21:10:47くそスレ化のための燃料ですか?
0971名無しさん@お腹いっぱい。
2007/08/09(木) 21:12:46はえーなw
そうするわ<フィードバック
再現できた。
ls | echo 1^C
ls
0972名無しさん@お腹いっぱい。
2007/08/10(金) 10:31:14bはまだ実行中だけど、aが終了したときにbにシグナルを送って強制的に終了することってできますか?
0973名無しさん@お腹いっぱい。
2007/08/10(金) 11:10:07trap "kill $pid;kill -0 $pid && { sleep 1;kill -9 $pid; }; :" EXIT
0974名無しさん@お腹いっぱい。
2007/08/10(金) 11:33:26trap: Illegal number: EXIT
0975名無しさん@お腹いっぱい。
2007/08/10(金) 13:18:19trap "kill $pid;kill -0 $pid && { sleep 1;kill -9 $pid; }; :" 0
0976名無しさん@お腹いっぱい。
2007/08/10(金) 13:26:23セマフォ使えればいいんだけど、そんなコマンドないもんね・・・
0977名無しさん@お腹いっぱい。
2007/08/10(金) 13:38:33ありがとうございます。
ちなみにSIGKILLはどうしようもないですよね・・・
0978名無しさん@お腹いっぱい。
2007/08/10(金) 13:41:550979名無しさん@お腹いっぱい。
2007/08/10(金) 13:47:20FreeBSDには
LOCKF(1) FreeBSD General Commands Manual LOCKF(1)
NAME
lockf -- execute a command while holding a file lock
がある。
0980名無しさん@お腹いっぱい。
2007/08/10(金) 23:17:10lockf は簡単だけど無ければ mkdir を使うんじゃね?
0981名無しさん@お腹いっぱい。
2007/08/11(土) 19:03:37typeset -A で連想配列を使用したいんですが、ksh93でKey値の一覧を取得する方法ってあるんでしょうか?
(Perlでいうとkeys関数みたいな感じで)
0982名無しさん@お腹いっぱい。
2007/08/11(土) 20:05:440983名無しさん@お腹いっぱい。
2007/08/11(土) 21:25:48ソースが公開されてんのって、ksh93だから、LinuxやFreeBSDとかでもpdksh以外のkshを使おうとすると、ksh93になるよね。
逆にksh88的に使いたいならpdkshになるんだけど、pdkshはpdkshでksh88とは振る舞いが結構違うのでいたいところがあるね。
商用系のUnixだと、AIXは/bin/ksh93がksh93、/bin/kshはksh88。HP-UXやSolarisはどうなんだろ?一応、ksh93は存在するみたいだけど・・・
0984名無しさん@お腹いっぱい。
2007/08/11(土) 22:08:090985名無しさん@お腹いっぱい。
2007/08/11(土) 23:31:11レス数が950を超えています。1000を超えると書き込みができなくなります。