シェルスクリプト総合 その2
レス数が1000を超えています。これ以上書き込みはできません。
0001名無しさん@お腹いっぱい。
2005/04/17(日) 00:17:17まずは注意点、リンク、地鎮祭など(>>1-10くらい)をご覧ください。
□前スレや過去スレ:
シェルスクリプト総合 その1
http://pc8.2ch.net/test/read.cgi/unix/1101820646/
☆シェルスクリプトを勉強するにあたって☆
http://pc5.2ch.net/test/read.cgi/unix/989659936/
便利なシェルスクリプト見せろ
http://pc5.2ch.net/test/read.cgi/unix/996949546/
【貝】第1回シェル講座【殻】
http://fun.kz/test/read.cgi/unix/1016372780/
□関連スレ:
sed
http://pc8.2ch.net/test/read.cgi/unix/1085730992/
おまえら! shell は何を使っているんですか?
http://pc5.2ch.net/test/read.cgi/unix/1012330865/
Eshell の使い方とか設定とか【Emacs Shell、Lisp】
http://pc8.2ch.net/test/read.cgi/unix/1102921590/
□他板の関連スレ:
Macでシェルスクリプト総合 Part 1
http://pc7.2ch.net/test/read.cgi/mac/1105074933/
【Shell】どのシェル使ってる?【Script】
http://pc8.2ch.net/test/read.cgi/linux/1067330754/
0002名無しさん@お腹いっぱい。
2005/04/17(日) 00:17:59・特記なき場合はbourne shがデフォルトです。
bash/csh/tcsh/zsh/ksh/ashなどに依存する場合は明示しましょう。
Linuxユーザは/bin/shの正体がbashなので特に注意。
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
manや参考リンクを見ましょう。
aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルスクリプトのことをシェルってゆーな
□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
RubyやPerlの方が適した仕事には素直にそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。
□初心者向けリンク
「誰にでも」シリーズ
http://kanji.zinbun.kyoto-u.ac.jp/~yasuoka/publications/dareUni/
/bin/shプログラミング入門
http://freebooks.info.nara-k.ac.jp/archive/ShellProgramming/
Bourne Shell 自習テキスト
http://www.tsden.org/takamiti/shText/shText.html
シェルを使おう - 導入からプログラミングまで -
http://www.netfort.gr.jp/~tomokuni/lms/shell/text/
0003名無しさん@お腹いっぱい。
2005/04/17(日) 00:18:44プロフェショナルシェルプログラミング
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
□関連書籍と関連リンク:
FreeBSD 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/
0004名無しさん@お腹いっぱい。
2005/04/17(日) 00:20:03制御・条件判定系:
[,test,expr,true,false,yes,getopts
テキスト処理系:
cat,awk,sed,tr,sort,uniq,grep,wc,head,tail,cut,paste,comm,join
ファイル名・ディレクトリ系:
find,xargs,basename,dirname
出力系:
echo,printf
対話コマンド制御系:
expect
http/ftpの処理自動化:
wget,curl
0005名無しさん@お腹いっぱい。
2005/04/17(日) 00:21:440006名無しさん@お腹いっぱい。
2005/04/17(日) 00:39:49乙
0007名無しさん@お腹いっぱい。
2005/04/17(日) 03:42:00お約束は>>1に置いといた方がよかったんでは。
次スレのテンプレは前スレ準拠がいいな。
0008名無しさん@お腹いっぱい。
2005/04/17(日) 10:55:18どうしますか?
0009名無しさん@お腹いっぱい。
2005/04/17(日) 10:58:11echo -e "\xFF"
で混ぜる。
0010名無しさん@お腹いっぱい。
2005/04/17(日) 10:59:440011名無しさん@お腹いっぱい。
2005/04/17(日) 11:19:120012名無しさん@お腹いっぱい。
2005/04/17(日) 12:12:490013名無しさん@お腹いっぱい。
2005/04/17(日) 13:14:530014名無しさん@お腹いっぱい。
2005/04/18(月) 21:29:39> touch ゆみさんかわいいよゆみさん
> ls
ゆみさんかわいいよゆみさん
> touch ゆみさんかわいいよゆみさ
> touch ゆみさんかわいいよゆみ
> touch ゆみさんかわいいよゆ
> touch ゆみさんかわいいよ
> ls
ゆみさんかわいいよ ゆみさんかわいいよゆみさ
ゆみさんかわいいよゆ ゆみさんかわいいよゆみさん
ゆみさんかわいいよゆみ
> rm ゆみさん*
> ls
0015名無しさん@お腹いっぱい。
2005/04/18(月) 21:45:40はできるけど$'......'の形式がダメ
0016名無しさん@お腹いっぱい。
2005/04/18(月) 21:49:540017名無しさん@お腹いっぱい。
2005/04/18(月) 22:20:500018名無しさん@お腹いっぱい。
2005/04/18(月) 23:35:03最初に起動したコマンドのプロセス番号を記録しておけばいいんでしょうか。
一度には一つしか使わないので、psコマンドの出力を適当にgrepして使ってもいいでしょうか。
お知恵をお貸しください。しばらく自分で考えてみます。
0019名無しさん@お腹いっぱい。
2005/04/18(月) 23:37:210020名無しさん@お腹いっぱい。
2005/04/18(月) 23:37:530021名無しさん@お腹いっぱい。
2005/04/18(月) 23:38:23そんなにいいならちょっと見てみますね。
002221
2005/04/18(月) 23:39:52002321
2005/04/18(月) 23:41:45ついでに言いますと、root権限がない場合のことも考えておきたいところなんです。
0024名無しさん@お腹いっぱい。
2005/04/18(月) 23:42:37シェルスクリプトでatofに相当するコマンドと使用法を教えてください
0026名無しさん@お腹いっぱい。
2005/04/18(月) 23:47:05一般ユーザでってこと?特別な管理専用ユーザつくるってこと?
0027名無しさん@お腹いっぱい。
2005/04/18(月) 23:49:460028名無しさん@お腹いっぱい。
2005/04/18(月) 23:52:10どうやら別のとこが悪かったみたいです。
ありがとうございました。
0029名無しさん@お腹いっぱい。
2005/04/19(火) 00:04:59実際のスクリプトでは、最後の行にlftpでログをミラーする文を追加しています。
#!/bin/sh
if ! ps augxww | grep -v grep | grep "java -classpath .:./lib/pircbot.jar org.jibble.logbot.LogBotMain"
then
echo "Restarting LogBot...."
(cd /path/to/LogBot && java -classpath .:./lib/pircbot.jar org.jibble.logbot.LogBotMain) 2>&1 | tee /path/to/LogBot.log
fi
そのまんまでひねりが無いですが、ま、動いています。
0030名無しさん@お腹いっぱい。
2005/04/19(火) 05:57:48終了したら開始するようにしたらダメ?
0031名無しさん@お腹いっぱい。
2005/04/19(火) 08:56:01execすればいい。
で、PIDファイルに対応するプロセスが死んでたらまたexecして、
生きてたらそのまま終了する。これをcronで好きな間隔でまわせばいい。
0032名無しさん@お腹いっぱい。
2005/04/19(火) 10:52:54root に無断でそういうことをするのはやめてくれ。
0033名無しさん@お腹いっぱい。
2005/04/21(木) 20:44:53rshを使ってサーバAからサーバBとサーバCに
配置してあるスクリプトXを非同期に実行させようとしています
rshで実行したスクリプトXの戻り値を取得しようと
スクリプトXの戻り値を(Aの)標準出力に表示させているんですが
1 rsh -n servA 'X'&
2 rsh -n servB 'X'&
3 AとBからの戻り値を標準出力から取り込むまで待機する
1と2の処理の間にservAの戻り値が表示されてしまうと
3で止まったままになってしまう気がします
どうすればうまく待ち合わせができるんでしょうか
そもそもrshなんか使うなというツッコミは無しの方向でお願いします
0034名無しさん@お腹いっぱい。
2005/04/21(木) 21:35:33イマイチ、何をしたいのかが不明だけど。
0035名無しさん@お腹いっぱい。
2005/04/21(木) 21:42:23> 3 AとBからの戻り値を標準出力から取り込むまで待機する
が意味不明
0036名無しさん@お腹いっぱい。
2005/04/21(木) 21:43:26戻り値って終了ステータスのことだよ。
それから、&を付けてバックグラウンドにすると、
戻り値はすべて0になるから、判定不可能になる。
&をやめてフォアグラウンドにしても、
rsh越しだと戻り値を取得できず、
やはりすべて0になって判定不可能になる。
003733
2005/04/21(木) 22:21:53rshそのものの戻り値($?)を得たいのではなく
rsh越しのスクリプトXの戻り値を得たいので
スクリプトX側で標準出力に終了を表す文字列(0とかcompleteとか)を表示すれば
擬似的な戻り値を得られると思ったんですが
やりたい事はこうです
A: ->(Xを実行しろと命令してすぐリターン) B
B: Xが終わったのでecho 0(完了の意)
A: Aの端末に0が表示される
A: 0と表示されたのを確認してBのお仕事xが終わったと判断
ひょっとして俺はなにか思い違いをしてます?
0038名無しさん@お腹いっぱい。
2005/04/21(木) 22:54:13かなりしてそう。
まず、rshとかAとかBとかもちだすからいかんのだ。
時間のかかるコマンドxとyがある。でどうしたい?
0039名無しさん@お腹いっぱい。
2005/04/21(木) 23:03:240040名無しさん@お腹いっぱい。
2005/04/21(木) 23:10:16>> ひょっとして俺はなにか思い違いをしてます?
>かなりしてそう。
やはりですか
>時間のかかるコマンドxとyがある。でどうしたい?
xとyを非同期に実行させたいわけです
xを実行
(x:実行中)
yを実行
(x:実行中y:実行中)
xとyの完了を待つ(どちらが先に完了するかは不明)
0041名無しさん@お腹いっぱい。
2005/04/21(木) 23:10:253 の実現方法がよく分からんのだが、、、ってのは置いといて、
rsh -n servA 'X' > /tmp/a.$$ & とかして、そのファイルの中身をチェックすればいいんでは?
>>36
バックグラウンドでもwaitとかで取れるだろ。
戻り値取得ってsshならOKだけど、rshってNGなん?
0042名無しさん@お腹いっぱい。
2005/04/22(金) 00:01:42でも元質問が「rshなんか使うなというツッコミは無しの方向で」
と言ってるからな。
0043名無しさん@お腹いっぱい。
2005/04/22(金) 00:54:03戻り値なんてどこに出てくる必要があるんだ?
x & y & wait
0044名無しさん@お腹いっぱい。
2005/04/22(金) 01:34:58ここはバカばっか。肛門で茶が沸くわw
0045名無しさん@お腹いっぱい。
2005/04/22(金) 01:42:440046名無しさん@お腹いっぱい。
2005/04/22(金) 01:49:060047名無しさん@お腹いっぱい。
2005/04/23(土) 03:14:330048名無しさん@お腹いっぱい。
2005/04/23(土) 04:14:04ttp://upup2.com/ @1MB up3220
0049名無しさん@お腹いっぱい。
2005/04/23(土) 04:18:26ttp://makimo.to/2ch/pc8_unix/1101/1101820646.html
ttp://makimo.to/cgi-bin/html2dat/html2dat.cgi?pc8_unix/1101/1101820646.html
0050ero usen-221x255x68x19.ap-US01.usen.ad.jp/
2005/04/23(土) 05:43:51と ァ w ぇ ww
る う う
えぇ ぉハ ハ お w w
け し の は w k wう
0051名無しさん@お腹いっぱい。
2005/04/23(土) 08:25:410052名無しさん@お腹いっぱい。
2005/04/23(土) 09:46:46なぜかUNIX板でよく見るのは気がする
005347
2005/04/23(土) 12:48:33サンクス
0054名無しさん@お腹いっぱい。
2005/04/24(日) 11:21:46誰もXからの出力を読んでないじゃないか。
for host in servA servB; do
(exit `rsh -n $host 'X'`) &
done
wait
0055名無しさん@お腹いっぱい。
2005/04/26(火) 17:29:16質問無いね。
0056名無しさん@お腹いっぱい。
2005/04/26(火) 19:16:46-------------------------
[test1]
number = 8
hoge = "foo"
[test2]
rock = 89
scottie = "sharp"
again = 123
[test3]
number = 998
hoge = "thinking"
[test4]
ms = "end"
-------------------------
こんなiniファイルがあったとして、
「test2」「test4」を消したいんですが、
そんなシェルできるのでしょうか?
0057名無しさん@お腹いっぱい。
2005/04/26(火) 19:16:51完成系
-------------------------
[test1]
number = 8
hoge = "foo"
[test3]
number = 998
hoge = "thinking"
-------------------------
0058名無しさん@お腹いっぱい。
2005/04/26(火) 19:19:480059名無しさん@お腹いっぱい。
2005/04/26(火) 19:27:24cat ini |sed -e "/\[test2\|4\]/,/^$/d;"
0060名無しさん@お腹いっぱい。
2005/04/26(火) 19:53:31だったらおれもperlつかって
cat ini | perl -e '$/="";while(<>){if($_ !~ /\[test[24]\]/){print $_;}}'
0061名無しさん@お腹いっぱい。
2005/04/26(火) 19:58:320062名無しさん@お腹いっぱい。
2005/04/26(火) 20:03:56/bin/sh ; zsh4.2.0 ; bash 3.00.16だと
$ cat ini |sed -e "/\[test2\|4\]/,/^$/d;"
[test1]
number = 8
hoge = "foo"
[test2]
rock = 89
scottie = "sharp"
again = 123
[test3]
number = 998
hoge = "thinking"
[test4]
ms = "end"
/bin/tcsh; /bin/cshだと
%cat ini |sed -e "/\[test2\|4\]/,/^$/d;"
変数名が不正です.
だめじゃん。
0063名無しさん@お腹いっぱい。
2005/04/26(火) 20:09:040064名無しさん@お腹いっぱい。
2005/04/26(火) 20:16:460065名無しさん@お腹いっぱい。
2005/04/26(火) 20:20:260066名無しさん@お腹いっぱい。
2005/04/26(火) 20:26:190067名無しさん@お腹いっぱい。
2005/04/26(火) 20:39:480068名無しさん@お腹いっぱい。
2005/04/26(火) 20:59:43もすこしエレガントに。
cat ini | perl -ne 'BEGIN{$/=""}; /\[test[24]\]/ or print;'
0069名無しさん@お腹いっぱい。
2005/04/26(火) 22:58:390070名無しさん@お腹いっぱい。
2005/04/26(火) 23:02:10007156
2005/04/26(火) 23:28:34やっぱ余裕でできるんですね。
もっと勉強します。
ちなみにAIX4.3でperlないっすね・・・
0072名無しさん@お腹いっぱい。
2005/04/26(火) 23:45:02Command Line Editing
と
Using Interactive History
が入ってないんだろう?ドキュメントを加工するから texi ファイル
で全ドキュメントが欲しいんだけど
0073名無しさん@お腹いっぱい。
2005/04/26(火) 23:45:12ダブルクオートをシングルクオートにかえりゃいいじゃん。
どのシェルでもいけるだろ。
0074名無しさん@お腹いっぱい。
2005/04/26(火) 23:51:40egrepを使用して
「先頭にABCまたはDEFを含むが、それ以降文中にGHIを含まない」
処理を行いたいと以下の様にしました
egrep "^(ABC|DEF)" | egrep -v "GHI"
マッチしない:ABChogeGHI
マッチする:DEFhogefoo
が、grepを二回呼ぶのはかっちょ悪い気がします
うまい事grep一発でマッチさせる方法はあるんでしょうか
0075名無しさん@お腹いっぱい。
2005/04/27(水) 00:33:090076名無しさん@お腹いっぱい。
2005/04/27(水) 00:39:57sed -e '/^\(ABC\|DEF\)/{ /GHI/d; }'
007756
2005/04/27(水) 11:46:05iniファイルの特定のセクションを削除するというやつなんですが。
複数のiniファイルの複数のセクションを消したいのです。
例えば
/hoge/foo/test1.iniの[bar22]と[bar33]
/hoge/goo/test3.iniの[test51]と[tea312]と[write556]
/hoge/asdf.iniの[read52]
・・・
ってな感じなんです。
自分のイメージでは消したいiniとセクションをどっかのテキストに書いておいて
んでそれを読み込みながら削除するって感じになるんですかね。
是非教えてください
/bin/sh
0078名無しさん@お腹いっぱい。
2005/04/27(水) 11:54:37自分ではどこまでできたの?
0079名無しさん@お腹いっぱい。
2005/04/27(水) 12:36:270080名無しさん@お腹いっぱい。
2005/04/27(水) 13:02:00別にシェルスクリプトにこだわらなくてもいいんじゃないの。
Windowsのreg.exeみたいな単発ユーティリティ作ったら。
0081名無しさん@お腹いっぱい。
2005/04/27(水) 13:10:06使ってもいいというルールならどうかな。
内部コマンドだけではつらい。
bashならできるか。
0082名無しさん@お腹いっぱい。
2005/04/27(水) 15:14:31ini2 test1 test3
とか書きこんだファイルの名前を引数にして起動
#!/bin/sh
list=$1
exec < $list
while read LINE;do
for i in $LINE;do
if [ -z $file ];then
file=$i;
else
section=$i
ed $file <<EOF
/$section/
.,/^$/d
w
q
EOF
fi
done
file=""
done
0083名無しさん@お腹いっぱい。
2005/04/27(水) 18:43:01008456
2005/04/27(水) 23:44:330085名無しさん@お腹いっぱい。
2005/04/29(金) 05:20:17以下のようにすると、当然ながら $result に "func" という
文字列が代入されてしまいます・・・
func() {
return aaa
}
result=func
0086名無しさん@お腹いっぱい。
2005/04/29(金) 05:27:40% func() { echo aaa}
% result=$(func)
% echo $result
aaa
%
0087名無しさん@お腹いっぱい。
2005/04/29(金) 07:01:48やってみましたが、
bash: fg: %: no such job
bash: fg: %: no such job
:
と表示されてしまいます。
0088名無しさん@お腹いっぱい。
2005/04/29(金) 07:14:38% はプロンプトだから入力しないで良いよ
0089名無しさん@お腹いっぱい。
2005/04/29(金) 07:28:01↓これで試してみて。
#!/bin/sh
func() { echo aaa ;}
res=$(func)
echo $res
0090名無しさん@お腹いっぱい。
2005/04/29(金) 09:25:570091名無しさん@お腹いっぱい。
2005/04/29(金) 10:21:55func() {
ret=aaa
}
result=$ret
戻り値とは言わんけど。
0092名無しさん@お腹いっぱい。
2005/04/29(金) 10:51:09func ret
echo $ret
0093名無しさん@お腹いっぱい。
2005/04/29(金) 11:51:30それは、いろいろ応用が利きそうだね。
0094名無しさん@お腹いっぱい。
2005/04/29(金) 19:39:36効かない。
009585
2005/04/30(土) 06:03:43受け取れるわけですね。一般的な sh の処理かどうかは分かりませんが、
とりあえずコレでやってみようと思います。
func() {
echo aaa
}
result=`func`
0096名無しさん@お腹いっぱい。
2005/04/30(土) 11:42:40echo aaa
}
func
result=$?
0097名無しさん@お腹いっぱい。
2005/05/01(日) 11:10:30どうやってやるのが一番お勧めですか?
perlでなら出来るのですが、処理が大量に発生するので
もう少し軽い仕組みが出来ないかなと調べているところです。
0098名無しさん@お腹いっぱい。
2005/05/01(日) 11:33:550099名無しさん@お腹いっぱい。
2005/05/01(日) 11:34:370100名無しさん@お腹いっぱい。
2005/05/01(日) 11:45:19m9(^Д^)プギャー
0101名無しさん@お腹いっぱい。
2005/05/01(日) 13:06:44010297
2005/05/01(日) 13:59:04コピーじゃなくて切り取りをしたいのですがいい手ありますか?
0103名無しさん@お腹いっぱい。
2005/05/01(日) 14:06:22m9
010497
2005/05/01(日) 14:26:02検索するとスクリプトとは関係ないものばかりヒットして・・・
0105名無しさん@お腹いっぱい。
2005/05/01(日) 14:39:03m9(^Д^)プギャー
0106名無しさん@お腹いっぱい。
2005/05/01(日) 14:46:53ならperlで良いんじゃ?
0107名無しさん@お腹いっぱい。
2005/05/01(日) 15:17:57一時的にコピーするなり、mvするなりの処理がいる。
結局、読み書きopenのできるperlの方が効率よくなる、はず。
0108名無しさん@お腹いっぱい。
2005/05/01(日) 16:24:20コピーした後で
ed <<file> <<EOF
$
d
w
q
EOF
0109名無しさん@お腹いっぱい。
2005/05/03(火) 18:55:15(true | exit 0; exit 1); echo $?
(set -e; (false); true); echo $?
( (set -e; false; true) && exit 0; set -e; (false; true) && exit 1; exit 2); echo $?
0110名無しさん@お腹いっぱい。
2005/05/03(火) 21:20:180111名無しさん@お腹いっぱい。
2005/05/04(水) 12:34:43行毎に取り出すことは出来ないのでしょうか?
例えば
file1の1行目を取り出して別の関数に引き渡す
引き渡したら2行目を同様に別の関数へ引き渡す。
この繰り返しで3行目、4行目・・・
いった感じを考えているんですが、
shellでは可能でしょうか?
0112名無しさん@お腹いっぱい。
2005/05/04(水) 12:38:520113名無しさん@お腹いっぱい。
2005/05/04(水) 12:46:46ありがとうございます。
全くの初心者のものなので凄く悩んでしまいました。
もっと勉強します。
0114名無しさん@お腹いっぱい。
2005/05/05(木) 00:13:39ps ax | grep wine | kill `awk '{print $1}'`
0115名無しさん@お腹いっぱい。
2005/05/05(木) 00:19:17こうしようぜ。
0116名無しさん@お腹いっぱい。
2005/05/05(木) 00:53:390117名無しさん@お腹いっぱい。
2005/05/05(木) 05:26:070118名無しさん@お腹いっぱい。
2005/05/05(木) 20:45:030119名無しさん@お腹いっぱい。
2005/05/05(木) 20:47:22yes "A" | head -n 10 | tr -d "\n"
0120名無しさん@お腹いっぱい。
2005/05/05(木) 20:55:21ありがとうございます。
0121名無しさん@お腹いっぱい。
2005/05/05(木) 21:09:50ruby -e 'puts("X"*20)'
か
printf "%020d" 0|tr 0 X
0122名無しさん@お腹いっぱい。
2005/05/05(木) 21:25:242進数文字列の 00110 01010 のビットAND ORは?
0123名無しさん@お腹いっぱい。
2005/05/05(木) 21:58:480124名無しさん@お腹いっぱい。
2005/05/06(金) 15:48:57私のはなりません。
GNU bash, version 2.04.0(1)-release (i386-turbo-linux-gnu)
0125名無しさん@お腹いっぱい。
2005/05/06(金) 16:16:23負の値をbashで扱いたい時は $((-1)) とするか、明示的に typeset すべき。
0126名無しさん@お腹いっぱい。
2005/05/06(金) 16:27:38おお、ありがとうございます。
0127名無しさん@お腹いっぱい。
2005/05/06(金) 22:21:34aaa
bbb
EOF
とヒアドキュメントの値を変数に格納したいのですが、
どうやっていいのか分りません。あくまでリダイレクトである以上
変数への格納は無理なんでしょうか?
0128名無しさん@お腹いっぱい。
2005/05/06(金) 22:33:480129名無しさん@お腹いっぱい。
2005/05/06(金) 22:47:18$ VAL=`cat << 'EOF'
aaa
bbb
EOF`
$ echo $VAL
aaa bbb
ってことをやりたいの?
# 移植性は未調査だけど
0130名無しさん@お腹いっぱい。
2005/05/06(金) 22:50:08そうですね、マニュアル見たら全然別物でした。
>>129
そうです、それがやりたかったです。どうもありがとうございました。
0131名無しさん@お腹いっぱい。
2005/05/06(金) 23:02:08スペースになってしまいますね。
0132名無しさん@お腹いっぱい。
2005/05/06(金) 23:06:08改行コードに変換するのがいいみたいです。お騒がせしました。
0133名無しさん@お腹いっぱい。
2005/05/06(金) 23:53:03変数に当日の年月日を設定するのは簡単なんですが
前日を設定するにはどうしたらいいでしょうか?
0134名無しさん@お腹いっぱい。
2005/05/07(土) 00:19:50他の場合はどうするんだろ。
0135名無しさん@お腹いっぱい。
2005/05/07(土) 01:06:190136sage
2005/05/07(土) 01:25:070137名無しさん@お腹いっぱい。
2005/05/07(土) 01:26:590138名無しさん@お腹いっぱい。
2005/05/07(土) 01:42:280139名無しさん@お腹いっぱい。
2005/05/07(土) 03:24:35バカはどんなことでも自分が最高レベルと自負してくからこだわらずにいられない(藁
井の中のザコ、大海から逃げる。
0141名無しさん@お腹いっぱい。
2005/05/07(土) 10:32:18大海から逃げたザコ、井の中で大口。
0142名無しさん@お腹いっぱい。
2005/05/07(土) 10:37:210144名無しさん@お腹いっぱい。
2005/05/07(土) 12:26:22strftime(3) が %s を解すなら多分こんな感じ
$ date -r $((`date +%s`+86400))
>>132
IFSという環境変数について調べると幸せになるかもしれない。
0145名無しさん@お腹いっぱい。
2005/05/07(土) 13:35:580146名無しさん@お腹いっぱい。
2005/05/07(土) 16:55:39自分で作れよ( ゚ー゚)
0147名無しさん@お腹いっぱい。
2005/05/07(土) 18:05:330148名無しさん@お腹いっぱい。
2005/05/08(日) 01:07:08もうおまえしか見えない
0149名無しさん@お腹いっぱい。
2005/05/08(日) 10:57:36for i in $1;do
echo "ibase=10;obase=2;print $i, \".\""|bc
done
0150名無しさん@お腹いっぱい。
2005/05/10(火) 07:19:36IFS="."
for i in $1;do
echo "ibase=10;obase=2;print $i, \".\""|bc
done
$ sh cnv 127.1
1111111.1.$
0151名無しさん@お腹いっぱい。
2005/05/10(火) 14:28:15ibase=A を使え。
0152名無しさん@お腹いっぱい。
2005/05/10(火) 16:07:560153名無しさん@お腹いっぱい。
2005/05/11(水) 00:12:260154じゃこれでどう
2005/05/11(水) 00:47:25if [ $i -eq 0 ];then
num=00000000
elif [ $i -lt 2 ];then
num=0000000$num
elif [ $i -lt 4 ];then
num=000000$num
elif [ $i -lt 8 ];then
num=00000$num
elif [ $i -lt 16 ];then
num=0000$num
elif [ $i -lt 32 ];then
num=000$num
elif [ $i -lt 64 ];then
num=00$num
elif [ $i -lt 128 ];then
num=0$num
fi
}
IFS="."
j=0
for i in $1;do
if [ $j -gt 0 ];then
echo -n .
fi
num=`echo "obase=2;print $i;"|bc`
pad
echo -n $num
j=`expr $j + 1`
done
echo
0155名無しさん@お腹いっぱい。
2005/05/11(水) 00:52:520156名無しさん@お腹いっぱい。
2005/05/11(水) 08:10:11Version7では使えるけど。
0157名無しさん@お腹いっぱい。
2005/05/11(水) 18:41:13Version6では使えるけど。
0158名無しさん@お腹いっぱい。
2005/05/11(水) 20:53:29ご相談です;y=ー(゚д゚)・∵. ターン
[server_1.txt]
PC等,PCサロン,PCについて誰かが質問に答えるスレ
PC等,UNIX,全文エンジンEstraier
PC等,CG,モデラー silo
[server_2.txt]
PC等,モバイル,ID砲丸投げinモバイル
PC等,UNIX,全文エンジンEstraier
PC等,CG,ローポリスレ△3
ってあるテキストファイルがあるとして、
$ merge.sh server_1.txt server_2.txt
PC等,PCサロン,PCについて誰かが質問に答えるスレ
PC等,モバイル,ID砲丸投げinモバイル
PC等,UNIX,全文エンジンEstraier
PC等,CG,モデラー silo
とマージされるスクリプトを作りたいんです。要件としては
(1) #1,#2がキーでその後ろは自由項目
(3) #1,#2が同じ場合はserver_1.txtを採用
なんか簡単にsortとかでできそうな予感してたんですけど、
だめぽ・・・なんです。
どなたかいいスクリプトを・・・もしくは、スレ違いの
場合は誘導お願いします。
0159名無しさん@お腹いっぱい。
2005/05/11(水) 21:10:12すんません、#1, #2は$1, $2ってことです。
(CSVファイルの1列目、2列目ってことです)
0160名無しさん@お腹いっぱい。
2005/05/11(水) 21:32:46sortしてuniqじゃね?
uniqってカラムでなんか指定できたことね?
0161名無しさん@お腹いっぱい。
2005/05/11(水) 21:45:52Perl/Python 使った方が速そうだが
0162名無しさん@お腹いっぱい。
2005/05/11(水) 22:04:12出力される順番は不定。
#!/usr/bin/awk -f
BEGIN{ FS="," }
{ if(!($1 SUBSEP $2 in a)) a[$1,$2] = $0 }
END{ for(i in a) print a[i] }
0163名無しさん@お腹いっぱい。
2005/05/13(金) 00:50:37思うように動作しないため、質問させていただきます。
==============================================
1. 変数Aを用意する。
変数Bに時刻「05:30」と値が格納されている。
変数Cを用意する。
2. AとBを比較します。
(1)Aの方がBよりも時刻が前の場合、Cに"OK"と格納する
(2)Aの方がBよりも時刻が後の場合、Cに"NG"と格納する
==============================================
このロジックでキモなのは、時刻の比較です。
最初、比較条件を [$A < $B] としておりました。
辞書式のやり方をネットで調べたらありましたので。
ですが、こうすると、変数Bが名前のファイルが出来てしまい、
比較しているのかどうかも怪しいのです。
すみませんが、お知恵を貸してはいただけないでしょうか。
宜しくお願い致します。
0164名無しさん@お腹いっぱい。
2005/05/13(金) 00:55:44[ $A \< $B ]
0165名無しさん@お腹いっぱい。
2005/05/13(金) 08:53:06$B=`date +%H%M`
みたいな感じで。
そしたら普通に数値比較の方法でいけるよ
0166名無しさん@お腹いっぱい。
2005/05/14(土) 00:14:57time_tの値を返すコマンドを作れ。
0167名無しさん@お腹いっぱい。
2005/05/14(土) 02:12:30こんなの書いてみた
# 05:30 -> 530 数値に書き換える
function timeToInt() {
if [ x"$1" = x"00:00" ] ; then
echo "0"
return
fi
echo $1 | sed s/:// | sed s/^0*//
}
if [ `timeToInt $A` -lt `timeToInt $B` ] ; then
C="OK"
else
C="NG"
fi
0168名無しさん@お腹いっぱい。
2005/05/14(土) 08:34:04俺も
a=09:39; b=05:30; if [ $((10#${a/:/})) -lt $((10#${b/:/})) ]; then c=OK; else c=NG; fi; echo $c
0169名無しさん@お腹いっぱい。
2005/05/14(土) 09:07:10の言う通り。
”:”だけ削除するロジックを入れれば、変数文字列の先頭に0が残っていても、数字として比較できる。
0170名無しさん@お腹いっぱい。
2005/05/14(土) 09:17:460が残っていると8進数になるんじゃない。
0171名無しさん@お腹いっぱい。
2005/05/14(土) 11:49:13>160
>161
>162
ありがとうつД`)・゚・。・゚゚・*:.。..。.:*・゚
でけました。
SUBSEPって言うawk変数の存在さえ知らなかったので
そこから調べました。ちなみに、キー項目はユーザの
入力項目なので初期値の "@" から変更しようかなとか
思ってます。
0172名無しさん@お腹いっぱい。
2005/05/14(土) 13:51:47昔の GNU awk は多次元配列の扱いがタコだったので
$1 SUBSEP $2 in a と書かないと動かなかったけど、
最近のは gawk に限らず ($1, $2) in a という書き方ができるので。
0173名無しさん@お腹いっぱい。
2005/05/14(土) 13:57:540174名無しさん@お腹いっぱい。
2005/05/14(土) 14:03:29if((i,j) in a) はできるけど、
for((i,j) in a) はできないから SUBSEP を使うんだな。
0175名無しさん@お腹いっぱい。
2005/05/14(土) 14:55:461,球技,20050514_120050
1,文化,20050514_160000
2,生活,20050514_170000
というテキストを
2,生活,20050514_170000
1,文化,20050514_160000
1,球技,20050514_120050
2,球技,20050514_120050
のようにしたいです。
ソートの優先条件は
1.日付の降順 ( sort -t , -k 3 -r)
2.先頭の番号の昇順 ( sort -t , -k 1 )
を一緒に実行したいってことです(降順と昇順を同時に指定)。
できますか??
0176名無しさん@お腹いっぱい。
2005/05/14(土) 15:03:290177163
2005/05/14(土) 21:59:46返事が遅れてしまい、申し訳ありませんでした。
色々考えて下さいまして、ありがとうございました。
あの後、色々当方でも考えましたが、
結局辞書式比較を諦めて、数値比較を行うことにしました。
(その直後に、秒単位まで見ることになってorz)
最初は、時、分、秒とパーツに分け、それぞれで比較を
行ってましたが、すごく馬鹿らしくなってきたので、
>>167氏のようにsedコマンドで":”を外し、それを
比較していく形にしたら、あっさりと出来てしまいました。
頭の"0"を気にしなくても良かったっぽいです。
肝心なのは、その数値の大小を見る事でしたから。
(余談ですが、このロジックが解決した後、色々悩んでた
問題が次々解決していく状態になりましたw
例えるとチューリップ開きっ放しみたいな感じ。
プログラム組んでる時って、こういう事たまにありますよねw)
0178名無しさん@お腹いっぱい。
2005/05/18(水) 08:08:13AND:
echo 00110 01010 |\
sed -e "s/^/%/; :ll; s/%\(.\)\(.*\) \(.\)\(.*\)/#\1\3%\2 \4/; tll; s/%//; s/#11/1/g; s/#[01]\{2\}/0/g;"
OR:
echo 00110 01010 |\
sed -e "s/^/%/; :ll; s/%\(.\)\(.*\) \(.\)\(.*\)/#\1\3%\2 \4/; tll; s/%//; s/#00/0/g; s/#[01]\{2\}/1/g;"
0179名無しさん@お腹いっぱい。
2005/05/18(水) 09:49:410180名無しさん@お腹いっぱい。
2005/05/18(水) 16:47:19/work/foo/bar/test
のtestだけを取得したいのですが、どのようにすればいいのでしょうか。
情けないがお手上げです・・・
簡単な質問だと思いますがよろしくお願いいたします。
0181名無しさん@お腹いっぱい。
2005/05/18(水) 16:50:16って basename 知らなくてもどうにでもなるでしょ。
0182名無しさん@お腹いっぱい。
2005/05/18(水) 16:52:270183名無しさん@お腹いっぱい。
2005/05/18(水) 16:52:47すいません。。。
ってもうカキコある・・・
ちなみにexprでやろうとがんばってたんですが
exprやって取得するにはどうすればよいのでしょうか?
0184名無しさん@お腹いっぱい。
2005/05/18(水) 17:25:56Example 2:
basename(1) をエミュレートします。basename(1) は、$a という
パス名の最後の要素を返します。$a が /usr/abc/file か、ただの
file のいずれかと等価の場合に、この例は、file を返します。引
数 としての単独の / に注意してください。expr は / を除数演算
子とみなします (後述の「注意事項」を参照)。
example$ expr $a : '.*/\(.*\)' \| $a
0185183
2005/05/18(水) 18:09:19ありがとうございます!
0186名無しさん@お腹いっぱい。
2005/05/19(木) 21:10:25!#/bin/sh
rsync.exe -arvz -e ssh /cygdrive/c/Documents\ and\ Settings/hoge/Local\ Settings/Application\ Data/Microsoft/Outlook ugo@mogo:/cygdrive/c/backup/
というviで作成したバックアップのスクリプトを実行させたのですが、rsyncから、t/Outlook: not foundというエラーが返ってきてしまいます。
viで作成したとき、途中で改行されてしまっているのが原因らしいのですが、回避する方法はありませんか?
'や"などを付けて実行しても同じような結果です。
初歩的な質問で申し訳ありません。
0187名無しさん@お腹いっぱい。
2005/05/19(木) 21:12:500188名無しさん@お腹いっぱい。
2005/05/19(木) 21:41:10> \
やはり、viが画面の端っこまで文字が来ると勝手に折り返して、改行コードを入れてしまうのが問題のようです。
\
を使うといいということですか?
回答ありがとう御座います。
0189名無しさん@お腹いっぱい。
2005/05/19(木) 21:51:370190名無しさん@お腹いっぱい。
2005/05/19(木) 21:52:24> 入れねぇだろw
やっぱりそうでしたか。何となく気づいてました。
viの設定で何とかしなければいけないようですね。
0191名無しさん@お腹いっぱい。
2005/05/19(木) 23:56:36ここか?
0192名無しさん@お腹いっぱい。
2005/05/20(金) 10:15:02> >Microsoft/Outlook
> ここか?
vimだと、t/Outlookで折り返されてしまうのです。
その状態で保存すると、Microsof t/Outlookという感じでパスが区切られてしますのです。
別のエディタでやれば問題なのです。
viの設定でしょうね。
ところで、スクリプトを書くときはどんなエディタを使っていますか?
0193名無しさん@お腹いっぱい。
2005/05/20(金) 19:19:45KWrite
0194名無しさん@お腹いっぱい。
2005/05/20(金) 19:42:10~/.vimrc あたりで breakat とか設定しとるか?
いずれにせよ無駄レス繰り返すよりも使ってる .vimrc 貼ったほうがなんぼか
確実なレスが付くし,解決も早いはず.
0196名無しさん@お腹いっぱい。
2005/05/21(土) 00:34:32とか邪悪なディレクトリ名を直接スクリプトに書くなんて。。。
OutLookの設定で、データの保存ディレクトリをもっとマシな場所に変えれば済むんじゃないの?
0197名無しさん@お腹いっぱい。
2005/05/21(土) 01:31:52避けて通れないよ。
0198名無しさん@お腹いっぱい。
2005/05/21(土) 02:20:52素人発見
0199名無しさん@お腹いっぱい。
2005/05/21(土) 03:17:52職業的にWindowsに触れる機会があるんなら
郷に入っては郷に従うべきだろう
0200186
2005/05/21(土) 08:59:30答えて方々ありがとう御座います。
オライリー「入門vi」を読んで、勉強することにします。
とりあえず、xyzzyで編集してしのいでます。
"Documents\ and\ Settings"とか、"Local\ Settings/Application\ Data"
はイヤなんですけど、そこらへんは、どういうわけかあんまり変えたくないのですよ。
0201名無しさん@お腹いっぱい。
2005/05/21(土) 10:00:53いっそのこと Docume~1 とかロングファイルネームを諦めちゃえば?
0202名無しさん@お腹いっぱい。
2005/05/22(日) 17:47:28sshでログインしたところで止まってしまいます。
仕方がないので、ログアウトするためにexitを実行すると、
shutdownコマンドが実行されて、ローカルのマシンの電源が切れてしますのです。
シェルスクリプトでは、リモートのPCを操作して、自動的にログアウトするようなことは、
無理なのでしょうか?
コマンド
#!/sh/bin
ssh hoge@ugo
shutdown -s -t 0
exit
0203名無しさん@お腹いっぱい。
2005/05/22(日) 18:07:241行目はなんじゃ?
ちなみに、”shutdown -s -t 0”
これってなんていうOSのコマンド?
0204名無しさん@お腹いっぱい。
2005/05/22(日) 18:16:39man ssh
0205名無しさん@お腹いっぱい。
2005/05/22(日) 18:21:29ssh hoge@ugo shutdown -s -t 0
0206名無しさん@お腹いっぱい。
2005/05/22(日) 18:21:430207名無しさん@お腹いっぱい。
2005/05/22(日) 19:45:53> ssh hoge@ugo shutdown -s -t 0
助かりました。これをスクリプトに保存しておきます。
#!/bin/sh
ssh hoge@ugo shutdown -s -t 0
186の方のように、Windowsを使っています。
0208名無しさん@お腹いっぱい。
2005/05/23(月) 16:10:05時代遅れ。
KDEでthunderbird使うと
~/.thunderbird/abcdefgh.default/Mail/Local\ Folders/Unsent\ Messages/
だったり、
~/.kde/share/apps/RecentDocuments/Mozilla\ Thunderbird.desktop
だったりするぞ。
0209名無しさん@お腹いっぱい。
2005/05/23(月) 21:46:11何してるかわからない箇所が出てきて困ってます(>_<)
これってどう解釈したら良いの?
ファイル名の何かをピリオドと比較してるようだけど・・・
詳しくは何してるのかなぁ
#!/bin/sh
filename=$1
if[ "${filename%${filename#?}}"="." ] ; then
0210名無しさん@お腹いっぱい。
2005/05/23(月) 22:00:39何してるかわからない箇所が出てきて困ってます(>_<)
これってどう解釈したら良いの?
ファイル名の何かをピリオドと比較してるようだけど・・・
詳しくは何してるのかなぁ
#!/bin/sh
filename=$1
if[ "${filename%${filename#?}}"="." ] ; then
0211名無しさん@お腹いっぱい。
2005/05/23(月) 22:21:22man sh して、Parameter Expansion の項を参照せよ。
0212名無しさん@お腹いっぱい。
2005/05/23(月) 22:28:19# expr を使わずに、shell の中だけでやるあたりが。。。
0213名無しさん@お腹いっぱい。
2005/05/23(月) 22:34:08for name in *;do
echo ${name%${name#?}}
echo $name
done
これを実行するとわかってしまう。
0214名無しさん@お腹いっぱい。
2005/05/23(月) 22:35:53/bin/sh がなくって試せないや。
0215名無しさん@お腹いっぱい。
2005/05/23(月) 23:01:56sh にはないね。Bad substitution エラーになりますた。
0216名無しさん@お腹いっぱい。
2005/05/23(月) 23:18:39${name#?}や${name%xxx}も、
巣の/bin/shでは使えない。
ファイル名の先頭が.かどうかを判断するなら、
case "$filename" in
.*)
hoge;;
esac
でやるべきだな。
これなら移植性抜群。
0217名無しさん@お腹いっぱい。
2005/05/24(火) 00:20:30プロセスid(pid)をうまく取得する方法はありますか。
何桁目で取得しているのですが、うまくいかずに困っています。
アドバイスお願いいたしまし。
0218名無しさん@お腹いっぱい。
2005/05/24(火) 00:29:11pgrep(1) で出来ると思うけど、そのままずばり pkill(1) 使えば?
Solaris 由来のコマンドだけど、最近の Linux にも入ってるらしい
シェルスクリプトでやりたいなら、ps(1) の出力を read(1) で
読んで処理すれば良いと思う
ps -ef | grep [m]y_command | read i j k; kill -9 $i
# i j k は適当。man 読んでね
0219名無しさん@お腹いっぱい。
2005/05/24(火) 00:37:54スマソ. こっちが正解
ps -ef | grep [m]y_command | while read uidx pidx rest; do kill -9 ${pidx}; done
0220名無しさん@お腹いっぱい。
2005/05/24(火) 01:10:55ps -o pid,command
0221名無しさん@お腹いっぱい。
2005/05/24(火) 01:29:27それって[ ]の中が引数1つだから常に真のような気がするが。
0222名無しさん@お腹いっぱい。
2005/05/24(火) 02:02:32grep [m]y_command は、my_commandにはマッチさせて
grep自身にはマッチさせないための常套手段。
んでも、grep '[m]y_command' みたいにクォートしないとダメかも。
0223名無しさん@お腹いっぱい。
2005/05/24(火) 02:11:09そういう話ではない。
0224218
2005/05/24(火) 02:11:32多分レス番違ってる...
bash はシングルクォートで囲わなくてもオッケーでした
zsh はダメみたい
デフォで囲っておくかエスケープした方が良かったですね
訂正サンクス
0225名無しさん@お腹いっぱい。
2005/05/24(火) 19:24:080226名無しさん@お腹いっぱい。
2005/05/24(火) 20:32:56たまたまカレントディレクトリに、
my_command
という名前のファイルが存在していると、
grep [m]y_command
を実行しても、シェルによって
grep my_command
に展開されてしまい、せっかくの用をなさなくなる。
なので、基本的には常にシングルクォートを使って
grep '[m]y_command'
とするものと覚えた方がいい
0227名無しさん@お腹いっぱい。
2005/05/24(火) 20:45:52なんでやねん。
アホか。
0228名無しさん@お腹いっぱい。
2005/05/24(火) 20:53:50おお、なるほど! こういうの、意外に見つけにくい盲点だよな。
作った時は動いたのに、ある日突然動かなくなるシェルスクリプトは、
原因が [m] とかの展開にあったりする。
カレントディレクトリはどこになるかわからないから、
こういう名前のファイルはない、とか、仮定しちゃいけないね。
>>227
あなたの方がアホですね。
0229名無しさん@お腹いっぱい。
2005/05/24(火) 21:30:11file指定がない場合、標準入力からの読み込みのはずだが?
0230名無しさん@お腹いっぱい。
2005/05/24(火) 21:34:16Hah?
grepが起動される前に、[m]y_commandという文字列が
シェルによって、カレントディレクトリと照合されて
展開されてしまうことを問題にしているわけだが?
頭大丈夫?
0231名無しさん@お腹いっぱい。
2005/05/24(火) 21:43:370232名無しさん@お腹いっぱい。
2005/05/24(火) 21:54:36シェルにとってはファイル名展開(ワイルドカードの一種)
grepにとっては正規表現であること、
および、シェルの引数解釈とコマンド実行の順序関係について、
>>227 = >>229 は理解していないと見た。
0233名無しさん@お腹いっぱい。
2005/05/24(火) 22:01:15間違ってないっしょ。
0234名無しさん@お腹いっぱい。
2005/05/24(火) 22:34:42ゴミンナサイ
221 は 209 の test コマンドに対して突っ込み入れてるのかと
思ってたけど違うか
0235名無しさん@お腹いっぱい。
2005/05/24(火) 22:45:37221 は 209 の testコマンドの = の両側にスペースがないことに
突っ込みを入れた。(この突っ込みは正しい)
222 は、221が自分への突っ込みかと誤解した。
しかし、その後、222が [m]y_command の意味について
説明していること自体は正しい。
上記の2つは全然別の話題。
0236名無しさん@お腹いっぱい。
2005/05/24(火) 22:53:41ちなみに 222 != 218 です。自分が 218, 219 なので。
0238名無しさん@お腹いっぱい。
2005/05/25(水) 01:56:430239名無しさん@お腹いっぱい。
2005/05/28(土) 16:08:43シェルスクリプトで
--------------------------------------
YYYY/MM/dd HH*MM:SS AAAAAAAAA BBBBBBB
CCCCC DDDDD
YYYY/MM/dd HH*MM:SS AAAAAAAAA BBBBBBB
CCCCC DDDDD
--------------------------------------
こういう形のログがある場合に
--------------------------------------
YYYY/MM/dd HH*MM:SS AAAAAAAAA BBBBBBB CCCCC DDDDD
YYYY/MM/dd HH*MM:SS AAAAAAAAA BBBBBBB CCCCC DDDDD
--------------------------------------
こういう風に直したいのですが、どのようにすればいいのですか?
要するに改行を取り除きたいのですが・・・。
0240名無しさん@お腹いっぱい。
2005/05/28(土) 16:16:56シェルスクリプトでもreadを使えばできるが、
普通はsedを使った方が楽。
よって、sedスレで質問しなさい。
http://pc8.2ch.net/test/read.cgi/unix/1085730992/l50
0241名無しさん@お腹いっぱい。
2005/05/28(土) 16:18:130242名無しさん@お腹いっぱい。
2005/05/28(土) 16:19:25cat log |sed -ne "N; s/\n/ /; p;"
0243名無しさん@お腹いっぱい。
2005/05/28(土) 16:20:41必ず2行単位で並んでいて、
その改行を取るだけなら、
↓
while read a_line
do
echo -n "$a_line"
read b_line
echo "$b_line"
done
0244名無しさん@お腹いっぱい。
2005/05/28(土) 16:26:46どことのマルチか書かないと。
0245名無しさん@お腹いっぱい。
2005/05/28(土) 16:31:19こちらに誘導されましたので、こちらで質問させていただきました。
>>242殿、>>243殿 ありがとうございました。
0246名無しさん@お腹いっぱい。
2005/05/28(土) 16:37:06移動したなら元スレにそう書いといてくれよ。
0247名無しさん@お腹いっぱい。
2005/05/28(土) 17:58:29礼儀の足りないやつだとでも心の中で思っとけ。
0248名無しさん@お腹いっぱい。
2005/06/02(木) 19:50:43(ttp://codezine.jp/a/article.aspx?aid=67 より)
上のスクリプトのechoの部分は、「echo "^[[1;1H"として画面左上隅にカーソルを
移動させる」とあります。
しかし、bash(2.05b)で動かしてみましたが、^[[1;1Hが表示されるだけです。
何が問題なのでしょうか?
0249名無しさん@お腹いっぱい。
2005/06/02(木) 20:07:40^[ をどうやって打ち込んだか
0250名無しさん@お腹いっぱい。
2005/06/02(木) 20:19:100251名無しさん@お腹いっぱい。
2005/06/02(木) 22:08:390252名無しさん@お腹いっぱい。
2005/06/02(木) 22:09:010253251
2005/06/02(木) 22:13:48いと思うが。
0254名無しさん@お腹いっぱい。
2005/06/02(木) 22:18:46そういう話じゃなくて>>249ってだけだと思うが
0255名無しさん@お腹いっぱい。
2005/06/02(木) 22:30:21すまん。
0256名無しさん@お腹いっぱい。
2005/06/03(金) 14:01:330257名無しさん@お腹いっぱい。
2005/06/03(金) 17:29:18ファイルのサイズを取得するのはどうすればいいのでしょう?
ls -lのサイズのカラムは決まっていないようですし、
-sオプションの振舞いも微妙に異なるので困ってます。
0258名無しさん@お腹いっぱい。
2005/06/03(金) 17:35:19stat(2)
0259257
2005/06/03(金) 17:42:10シェルスクリプトの中でcc起動してってことでしょうか?
Cのコードを書くとなると、そこでまたポータビリティに気を
使ったりしなきゃならないので、なるべく避けたいです。
wc呼ぶぐらいなら、Cのコードで行くとは思いますが...
0260名無しさん@お腹いっぱい。
2005/06/03(金) 17:45:510261名無しさん@お腹いっぱい。
2005/06/03(金) 18:42:010263名無しさん@お腹いっぱい。
2005/06/03(金) 19:21:440264名無しさん@お腹いっぱい。
2005/06/03(金) 22:06:44なんでwc嫌なの? wcだってfstatしてるだけじゃない。
0265名無しさん@お腹いっぱい。
2005/06/04(土) 00:40:25どのUNIXでも、wc -cはfstatするの?
0266265
2005/06/04(土) 00:51:41Red Hat Linux 9 は fstat64
FreeBSD 4.xはfstat
0267名無しさん@お腹いっぱい。
2005/06/04(土) 14:40:08じゃあスレ違いなんでどっか行ってください。
0268名無しさん@お腹いっぱい。
2005/06/04(土) 17:50:010269名無しさん@お腹いっぱい。
2005/06/04(土) 19:23:01必死だなw
0270名無しさん@お腹いっぱい。
2005/06/04(土) 23:41:27VAL=func1()
としただけでは
line 3: syntax error near unexpected token `('
となってしまいます。
0271名無しさん@お腹いっぱい。
2005/06/04(土) 23:45:31VAL=$?
0272名無しさん@お腹いっぱい。
2005/06/04(土) 23:49:47ありがとうございます。さすがシェルスクリプトですね。ダサすぎますw
PerlやRubyが流行るのも分るような・・・
0273名無しさん@お腹いっぱい。
2005/06/04(土) 23:57:14インタラクティブ用途がメインの言語にケチ付けるのもアレだな
0274名無しさん@お腹いっぱい。
2005/06/04(土) 23:57:370275名無しさん@お腹いっぱい。
2005/06/05(日) 00:10:23関数内でreturnした値が得られたみたいです。
$ function hello(){ return 3;};hello;echo $?
3
ただし、returnできる値はunsigned charに限られるようで、
0〜255までの値しか返せませんでした。ここは注意しないとダメっぽいです・・・
あともう一つお願いします。
$ if [ echo ];then echo "true";fi
true
$ if [ echo "abc" ];then echo "true";fi
bash: [: echo: unary operator expected
これはどうしてなんでしょうか?
0276名無しさん@お腹いっぱい。
2005/06/05(日) 00:18:39>unary operator expected
って書いてある通り
0277名無しさん@お腹いっぱい。
2005/06/05(日) 00:39:38abc
Sun Jun 5 00:39:09 JST 2005
true
testをやめて()にしたら、なぜだかいきました。
でも()ってたしかサブシェルの起動だったような・・・よくわからん
0278名無しさん@お腹いっぱい。
2005/06/05(日) 00:45:13ってどうなるかわかる?
0279名無しさん@お腹いっぱい。
2005/06/05(日) 00:55:16なんか基本的な部分が分かってない気がする。
とりあえず、man testしてみなさい。
0280名無しさん@お腹いっぱい。
2005/06/05(日) 01:08:54それが bash なら test の説明もあるし。
>>272
Perl や Ruby よりもシェルスクリプトが勝る点は、
どんなアホにもすぐに書き散らかすくらいのことは出来るようになるってこと
だからしょうがないよ。がんばれ。
0281名無しさん@お腹いっぱい。
2005/06/05(日) 01:08:590282名無しさん@お腹いっぱい。
2005/06/05(日) 01:09:45test(1)の中の記述で、
(expression) True if expression is true.
というものがあるんですが、これはなんでしょう?
>>278
ifというのは「以下に続くコマンドを実行した、その終了ステータスを
判定する」ということなのですね。
$ if cat /etc/password > /dev/null 2>&1;then echo "true";else echo "false";fi
false
$ if [ -z `cat /etc/password` ];then echo "true";else echo "false";fi
cat: /etc/password: No such file or directory
true
先のif(echo "abc"〜では、起動したサブシェルの終了ステータスを
判定していたということですか。なるほど。
0283名無しさん@お腹いっぱい。
2005/06/05(日) 01:11:25>どんなアホにもすぐに書き散らかすくらいのことは出来るようになるってこと
〜よりも〜が の用法が逆です。
0284名無しさん@お腹いっぱい。
2005/06/05(日) 01:21:54$ test echo
$ test ! echo
これらがなんのメッセージも出さないのはちょっと謎です。
まあどうでもいいか。
0285名無しさん@お腹いっぱい。
2005/06/05(日) 01:45:59うちの man test には以下の記述があります。
s1 True if s1 is not the null string.
なんのメッセージも出さないのは、そもそも echo が実行されないからですね。
0286名無しさん@お腹いっぱい。
2005/06/05(日) 03:13:50括弧を付けてもいいってこと。まあ普通は付けない
>>284
test echoはtest hogeと同じ
0287名無しさん@お腹いっぱい。
2005/06/05(日) 03:48:56しない例を挙げてください
0288名無しさん@お腹いっぱい。
2005/06/05(日) 04:13:410289名無しさん@お腹いっぱい。
2005/06/05(日) 13:09:110290名無しさん@お腹いっぱい。
2005/06/06(月) 22:14:470291名無しさん@お腹いっぱい。
2005/06/06(月) 22:17:070292名無しさん@お腹いっぱい。
2005/06/06(月) 22:40:070293名無しさん@お腹いっぱい。
2005/06/09(木) 23:15:07この ${1+"$@"} ってどういう意味?
0294名無しさん@お腹いっぱい。
2005/06/09(木) 23:41:09詳しい意味はUNIXプログラミング環境に書いてあった
希ガス
0295名無しさん@お腹いっぱい。
2005/06/10(金) 07:25:39${1+"$@"}と書く必要はなかったよ。
(引数ゼロ個の場合、"$@"は空文字列にならず、完全に消えてくれる)
今時、"$@"でいいんじゃないか?
逆に、${1+"$@"}と本当に書かなきゃならないshが存在するOSを
教えてくれ。
0296名無しさん@お腹いっぱい。
2005/06/10(金) 08:24:030297名無しさん@お腹いっぱい。
2005/06/10(金) 09:42:110298名無しさん@お腹いっぱい。
2005/06/10(金) 22:27:08>d
> パターンスペースを削除する。次のサイクルを開始する。
>D
> パターンスペースの最初の改行までを削除する。次のサイクルを開始するが、パターンスペースにまだデータが残っていたら、入力からの読み込みをスキップする。
0299名無しさん@お腹いっぱい。
2005/06/10(金) 22:33:39sedはsedスレへ
http://pc8.2ch.net/test/read.cgi/unix/1085730992/l50
0300名無しさん@お腹いっぱい。
2005/06/14(火) 23:20:41forで回してひとつひとつ消すと
時間はかかるけどvmstatで表示されるidが95 をキープする。
forのなかで5個ずつ消すと
時間はかからないけどidが90を切っちゃう。
時間かけず、idを高く保って、大量のファイルを削除する方法ありますきあ?
0301名無しさん@お腹いっぱい。
2005/06/14(火) 23:24:240302名無しさん@お腹いっぱい。
2005/06/14(火) 23:31:43idって何よ。priorityあるいはniceか?どっちにしてもエスパーな質問だな……
0303名無しさん@お腹いっぱい。
2005/06/14(火) 23:47:02vmstatコマンドを打つとcpuのしたにus,sy,idと表示されますよね?
idleだとおもいます。
0304名無しさん@お腹いっぱい。
2005/06/15(水) 00:16:380305名無しさん@お腹いっぱい。
2005/06/15(水) 00:24:480306名無しさん@お腹いっぱい。
2005/06/15(水) 05:12:02ファイルを削除ディレクトリに移動してディレクトリごと削除
0307名無しさん@お腹いっぱい。
2005/06/15(水) 09:32:12移動の時に同じ質問が
時間かけず、idを高く保って、大量のファイルを移動する方法ありますきあ?
0308名無しさん@お腹いっぱい。
2005/06/15(水) 10:09:42idle を増やしたいなら、ファイル消すたびに sleep 10 とかしたら?
>forのなかで5個ずつ消すと
rm file1; rm file2; ... と rm file1 file2 ... で
だいぶ違うわけだがどっちよ?
0309名無しさん@お腹いっぱい。
2005/06/15(水) 20:21:210310名無しさん@お腹いっぱい。
2005/06/16(木) 00:09:18rm file1 file2
でしょ
rm file1; rm file2;
は時間かかるぽい
0311名無しさん@お腹いっぱい。
2005/06/16(木) 06:27:49じぶんで thread で unlink するコマンドを書けば
0312名無しさん@お腹いっぱい。
2005/06/16(木) 07:42:19まぁ正解はシェルスクリプトで書くのをあきらめろってとこか。
0313名無しさん@お腹いっぱい。
2005/06/16(木) 08:04:160314名無しさん@お腹いっぱい。
2005/06/16(木) 20:58:46コマンドラインから
ls -ld /hoge/???/????? | awk "{print $9}"
と実行しますと<結果1>のように動作するのですが、
このコマンドをsh(bash)で実行すると<結果2>のように
エラーが吐かれてしまいます。
どのようにすればshで動作させることが出来るのか教えていただけないでしょうか?
<結果1>
/hoge/aaa/bbbbb
/hoge/aaa/ccccc
/hoge/ddd/eeeee
・
・
・
<結果2>
sh -xf hoge.sh
#ls -ld /hoge/???/?????
/hoge/???/?????は見つかりません。
0315名無しさん@お腹いっぱい。
2005/06/16(木) 21:15:14ルートにhogeはあるのか?
0316314
2005/06/16(木) 21:31:28ルートにhogeがあります。
補足説明しますと、
今回求めたいディレクトリは
ルート直下のhogeの中に/日付/時間と作られています。
パスの長さは一定なのでワイルドカードの[?]を用いて取得したのですが、
shに組み込むとうまくいかなかったのです。
0317名無しさん@お腹いっぱい。
2005/06/16(木) 21:49:280318名無しさん@お腹いっぱい。
2005/06/16(木) 22:26:410319名無しさん@お腹いっぱい。
2005/06/16(木) 22:30:34sh -xf しちゃ駄目だよ。
f はワイルドカード禁止オプション。
sh -x hoge.sh
でやってみろ。
あと、回答してる香具師、みんなハズシ。
0320名無しさん@お腹いっぱい。
2005/06/16(木) 22:46:140321314
2005/06/16(木) 22:56:16回答有難うございます。
只今実行できる環境ではないので報告は明日になると思います。
>-f はワイルドカード禁止オプション。
知りませんでした。。。
0322名無しさん@お腹いっぱい。
2005/06/16(木) 23:02:51ディレクトリ消すとき 必ず rm -fr するタイプ?
0323名無しさん@お腹いっぱい。
2005/06/16(木) 23:08:080324名無しさん@お腹いっぱい。
2005/06/16(木) 23:20:13美しくない。
0325名無しさん@お腹いっぱい。
2005/06/16(木) 23:31:120326名無しさん@お腹いっぱい。
2005/06/16(木) 23:34:360327314
2005/06/18(土) 03:08:00「-f」を外した所無事に出来ました。
有難うございました。
何故「-f」を付けたかというと、手元にあった書籍に書いてあったと認識してたんですけど
再度読み直してみるとそんな事は一言も書かれてませんでした。
凹みました。
>>322さん
するタイプであります・・・
0328名無しさん@お腹いっぱい。
2005/06/18(土) 20:07:42後学のために美しいやりかたを教えてくれたまえないか
0329名無しさん@お腹いっぱい。
2005/06/18(土) 20:51:30rmdir ですむときはそうしろってことじゃないの。
美しい美しくないというより、
rm -fr は危ない。
0330名無しさん@お腹いっぱい。
2005/06/18(土) 23:57:020331名無しさん@お腹いっぱい。
2005/06/19(日) 18:15:14ワイルドカードや再帰削除の場合はいちいち聞かれるとウザいので
-fつける。でもこういう危険な場合に限って-fつけるんでは、実は
あまり意味が無い気がする
二回ぐらい
rm -f *.jpg
のつもりで
rm -f *>jpg
とtypoして、カレントディレクトリの中身全削除したことある。
シフトキーの入力が甘かったりするとこうなる。
0332名無しさん@お腹いっぱい。
2005/06/19(日) 18:22:380333名無しさん@お腹いっぱい。
2005/06/19(日) 21:21:530334名無しさん@お腹いっぱい。
2005/06/20(月) 00:43:47touch ./-i
やってみたが、目からウロコ
0335名無しさん@お腹いっぱい。
2005/06/20(月) 08:16:330336名無しさん@お腹いっぱい。
2005/06/20(月) 18:23:18もしよろしければ、何か手がかりをください。
0337名無しさん@お腹いっぱい。
2005/06/20(月) 19:12:390338名無しさん@お腹いっぱい。
2005/06/20(月) 19:13:00まず、「日付の入ったフォルダ名」の名称自体を得るには、
dateコマンドに適当なスイッチをつければよい。厳密には
環境依存だからmanせよ。
つぎに、あるコマンド(例えばdate)の結果(標準出力)を
変数に入れたり、もしくは他のコマンドで利用するには、
backquoteを使う。
value=`...`
とか、
mkdir `....`
ね。これで、目的の名前のフォルダできるだろ。
あとは、適当に移動(mv)せよ。
0339名無しさん@お腹いっぱい。
2005/06/20(月) 19:32:17ありがとうございます。
0340名無しさん@お腹いっぱい。
2005/06/20(月) 19:32:38> m9(^Д^)プギャーーーッ
笑わないでください。
0341名無しさん@お腹いっぱい。
2005/06/20(月) 20:17:47チェックするにはどのようなすればよいでしょうか?
rshとかtestでがんばってたんですが、挫折しました・・・
0342名無しさん@お腹いっぱい。
2005/06/20(月) 20:32:04ssh HOST test -d DIR
0343名無しさん@お腹いっぱい。
2005/06/20(月) 20:32:36ssh 使え。
ssh foo test /foo
echo $?
0344名無しさん@お腹いっぱい。
2005/06/21(火) 01:51:02編集したいんですが、どうすればいいでしょうか?
Cでやるのは避けたいんだけど。。。
0345名無しさん@お腹いっぱい。
2005/06/21(火) 01:59:08cut
0346名無しさん@お腹いっぱい。
2005/06/21(火) 02:05:36詳しく
0347名無しさん@お腹いっぱい。
2005/06/21(火) 02:07:02man cut
0348名無しさん@お腹いっぱい。
2005/06/21(火) 02:14:08任意のファイルを先頭n行、後ろからm行を取り除いたファイルに
編集したいんですが・・
0349名無しさん@お腹いっぱい。
2005/06/21(火) 02:16:080350名無しさん@お腹いっぱい。
2005/06/21(火) 02:18:320351名無しさん@お腹いっぱい。
2005/06/21(火) 02:20:02> WORD
Open file WORD for writing as standard output. If the file does
not exist then it is created. If the file exists, and the CLOBBER
option is unset, this causes an error; otherwise, it is truncated
to zero length.
0352名無しさん@お腹いっぱい。
2005/06/21(火) 02:20:56単独ではな。
0353名無しさん@お腹いっぱい。
2005/06/21(火) 02:28:30ファイルをcatしてパイプで繋げてheadとかですか?
0354348
2005/06/21(火) 02:43:05head 後ろm行-ライン行数ってのは思いついたが、
ファイル行数が数万とかだと処理遅いよね・・・
0355名無しさん@お腹いっぱい。
2005/06/21(火) 02:44:37tail +$((n+1)) |head -$((w-m-n))
0356名無しさん@お腹いっぱい。
2005/06/21(火) 19:22:400357名無しさん@お腹いっぱい。
2005/06/21(火) 20:51:21awk 'NR>m{a[NR+n]=$0;if(NR in a) print a[NR]}'
0358名無しさん@お腹いっぱい。
2005/06/21(火) 21:35:22できました。
ありがとうございました。
結局どれがベストかわかんないけど、、、
0359名無しさん@お腹いっぱい。
2005/06/21(火) 21:59:30ruby -e 'ARGF.to_a[n..-m].display'
0360名無しさん@お腹いっぱい。
2005/06/22(水) 00:31:220361名無しさん@お腹いっぱい。
2005/06/22(水) 00:50:170362名無しさん@お腹いっぱい。
2005/06/22(水) 06:17:16で複数サイトを取得し、それをindex.html.1 index.html.2・・のように連番をつけて保存したいのですが、
wget -i url_list.txt -O index.html
だとindex.htmlに次々に上書きしてしまいます。
どのように直すべきか教えてください。よろしくお願いいたします。
0363名無しさん@お腹いっぱい。
2005/06/22(水) 07:20:50-O index.html なしで。
wget の質問ならくだ質行け。
0364名無しさん@お腹いっぱい。
2005/06/22(水) 08:16:50いや、これは連番のH画像の守備範囲だろ。
0365紹介しとくよ
2005/06/22(水) 10:10:46http://pc8.2ch.net/test/read.cgi/unix/979106537/
0366名無しさん@お腹いっぱい。
2005/06/22(水) 20:56:56どこを見れば良いんだろ。
0367名無しさん@お腹いっぱい。
2005/06/22(水) 21:14:37fj.unix.shells の2003年1月の記事。
0368名無しさん@お腹いっぱい。
2005/06/22(水) 21:36:02そんなドメイン、実在するんですか?
アクセスすると
DNSエントリが見つかりません
のエラーになったんですけど。
0369名無しさん@お腹いっぱい。
2005/06/22(水) 21:40:11そんなドメイン、実在するんですか?
アクセスすると
DNSエントリが見つかりません
のエラーになったんですけど。
0370名無しさん@お腹いっぱい。
2005/06/22(水) 21:43:250371名無しさん@お腹いっぱい。
2005/06/22(水) 21:47:11fj.unix.shells 2003 1
でググってみるとすぐわかると思うんだけど。。。
ttp://groups.google.com/groups?hl=ja&selm=avgti0$7h6$1@nriinetnews.nri.co.jp
0373名無しさん@お腹いっぱい。
2005/06/22(水) 22:36:190374名無しさん@お腹いっぱい。
2005/06/22(水) 23:32:43お前、古典の成績よくなかっただろw
0375名無しさん@お腹いっぱい。
2005/06/23(木) 00:36:400376名無しさん@お腹いっぱい。
2005/06/23(木) 00:51:40お前、現国の成績よくなかっただろw
0377名無しさん@お腹いっぱい。
2005/06/23(木) 01:53:220378名無しさん@お腹いっぱい。
2005/06/23(木) 01:59:200379名無しさん@お腹いっぱい。
2005/06/23(木) 09:52:150380名無しさん@お腹いっぱい。
2005/06/23(木) 19:04:30ファイルシステム内の音楽ファイルの容量を得るスクリプトキボン。
0381名無しさん@お腹いっぱい。
2005/06/23(木) 19:19:14TrackBack といい、これといい、なんで blog 界の奴らはこんな糞なことしか思い付かないのか。
0382名無しさん@お腹いっぱい。
2005/06/23(木) 23:52:08vmstatの出力結果を5秒毎にファイルに記録してます
vmstat 5 > vmstat_log
記録状況を確かめようとtail -fして監視してみたんですが
どうも途中でバッファリングされているのか20行程まとめて出力が一気に記録されます
vmstatのソースをみたんですが、コマンド自体は出力を毎回フラッシュしているようです
バッファリングされずに5秒毎にリアルタイムに記録したいのですが、
方法はあるんでしょうか
0383名無しさん@お腹いっぱい。
2005/06/24(金) 00:05:15俺のところではそれでちゃんと5秒くらいごとに一行ずつ表示される。
少なくともbashとは何の関係もないな。
システム依存のスレにいったほうがいい。
0384名無しさん@お腹いっぱい。
2005/06/24(金) 00:05:410385名無しさん@お腹いっぱい。
2005/06/24(金) 00:05:52フラッシュしてるのにフラッシュされないってどんな環境?
0386名無しさん@お腹いっぱい。
2005/06/24(金) 00:41:36tailの-fオプションって、入力が標準入力(パイプ)の時は無視されるんちゃう?
FreeBSDやGnu(やLinux)のtailだとmanにそうかいてあるけど。
0388名無しさん@お腹いっぱい。
2005/06/24(金) 10:37:16> 書き込んだファイルをtail -fしたってことか。
それだけじゃなくて、
> tailの-fオプションって、入力が標準入力(パイプ)の時は無視されるんちゃう?
これ、書き方が変だよ。
「入力が標準入力(パイプ)の場合に無視される」んじゃなくて、
「入力(標準入力)がパイプの場合に無視される」でしょ。
例えば「tail -f <vmstat_log」の場合、入力は標準入力だけど、
パイプじゃないから無視されないでしょ。
>>382
OSはなに?
NetBSD で
vmstat 5 >vmstat_log &
tail -f vmstat_log
を実行すると、ちゃんと1行ずつ表示されるよ。
vmstatのソースを読んだOSと、vmstatを実行しているOSが違っていて、
実行している方のOSのvmstatでは、毎行のfflush(stdout)がないん
じゃない?
0389382
2005/06/25(土) 01:16:44>>388
OSはRedHatEL3.0です
ちょっとどこのソースをみていたかを確認してみます
ちなみに今手元に環境がないのでcygwinで試したところ同様の現象が起きました
こちらのソースもみてみます・・・
0390名無しさん@お腹いっぱい。
2005/06/26(日) 10:09:570391名無しさん@お腹いっぱい。
2005/06/26(日) 12:11:34man stdio
0392名無しさん@お腹いっぱい。
2005/06/26(日) 13:12:510393名無しさん@お腹いっぱい。
2005/06/26(日) 16:49:120394名無しさん@お腹いっぱい。
2005/06/27(月) 10:50:08つ[APUE 2nd Edition]
0395名無しさん@お腹いっぱい。
2005/06/27(月) 11:47:03なぜcutはsortの出力のみを処理するのですか?
どうやってcatの出力とsortの出力を区別しているのですか?
#!/bin/sh
cat a.txt |
if [ "$MAILCHECK" = 10 ]
then
sort b.txt | cut -d, -f1
sed 's/hoge/fuga/'
else
sed 's/foo/bar/'
fi
0396名無しさん@お腹いっぱい。
2005/06/27(月) 12:55:31区別なんかしてない。標準入力を見ているだけだ。パイプによって
標準入力は sort の出力と結び付けられている
0397名無しさん@お腹いっぱい。
2005/06/27(月) 13:40:53パイプによって標準入力はsortの出力と結びつけられている。
さらに、catの出力とも結びつけられている。
というように思えます。
catとsortの出力が混じり合ったものをcutが処理すると
予想していましたが、catの出力がsedに渡っているよう
なので混乱しています。
もしかして
1. cutの標準入力にsortの出力を結びつける
2. その結び付きを解除する
3. sedの標準入力にcatの出力を結び付ける
4. その結び付きを解除する
という手順なのでしょうか?
0398名無しさん@お腹いっぱい。
2005/06/27(月) 14:13:37sedの行では特に入力は明示されていない。だからcatの出力をそのまま処理する。
0399名無しさん@お腹いっぱい。
2005/06/27(月) 16:00:12パイプについてもっと勉強します
ありがとうございました
0400名無しさん@お腹いっぱい。
2005/06/27(月) 16:26:210401名無しさん@お腹いっぱい。
2005/06/27(月) 18:09:560402名無しさん@お腹いっぱい。
2005/06/27(月) 20:08:500403名無しさん@お腹いっぱい。
2005/06/28(火) 17:07:24ls の結果を解析すれば取れるだろうけどもそっとスマートなやり方はないかな?
0404名無しさん@お腹いっぱい。
2005/06/28(火) 17:16:53Linuxだけど stat -c %y <file> で last modified を取得してまつよ
でも、表示が冗長なので他にも方法があれば知りたいところ
0405名無しさん@お腹いっぱい。
2005/06/28(火) 17:44:570406名無しさん@お腹いっぱい。
2005/06/29(水) 14:28:09またお前か。
0407名無しさん@お腹いっぱい。
2005/06/29(水) 16:06:58まるち?
0408名無しさん@お腹いっぱい。
2005/07/06(水) 00:00:30dirA/hoge01_2.txt
dirA/hoge01_10.txt
dirA/hoge01_11.txt
があった時に、find . -name "*.txt" して、この順番で表示させたいのですが、
やってみると、FreeBSDのfindだと期待通り表示されますが、cygwin の find
だと
dirA/hoge01_1.txt
dirA/hoge01_10.txt
dirA/hoge01_11.txt
dirA/hoge01_2.txt
と表示されてしまいます。これを上のように表示させる良い方法はないでしょうか?
find の出力を sort -t "_" -k2 とかやってもうまくいきませんでした。
0409名無しさん@お腹いっぱい。
2005/07/06(水) 00:12:29でfindしたら上になった。
0410名無しさん@お腹いっぱい。
2005/07/06(水) 00:12:49_と.で区切れ。
0411名無しさん@お腹いっぱい。
2005/07/06(水) 00:20:48同じマシンであってさえ、ファイルの作成した時期とかによって
出力の順番が異なることがありうるぞ。
0412408
2005/07/06(水) 00:34:58どうもです。
とりあえず sort -n -t "_" に通したら、うまくいきますた。
>>411
ということは、>>408の上のように表示されてもそれはたまたま
なので、sort に通した方が良さそうですね。
0413名無しさん@お腹いっぱい。
2005/07/06(水) 00:45:35sort でセパレータを2つ指定できるの?
>>412
「-k」を指定しないなら「-t」は不要だと思う。
その例なら「-n」だけでうまくいくんだろう。
ただ、「-n」は数値以外のフィールドでソートする場合(今回の場合)、
動作は保証されないと思う。
0414名無しさん@お腹いっぱい。
2005/07/06(水) 10:37:350415名無しさん@お腹いっぱい。
2005/07/06(水) 13:10:33を取得する方法をおしえてくださいませ。
for i in `ls *txt`
do
cat $FILE.txt | 適当な処理 > $FILE.doc
done
みたいなことをしたい。
前もって、foo だけを取得して、$FILE=foo としたい。。。
0416名無しさん@お腹いっぱい。
2005/07/06(水) 13:13:550417名無しさん@お腹いっぱい。
2005/07/06(水) 13:15:53訂正。
for in `ls *txt`
do
ここで、$FILE にファイルのピリオドより前の部分を突っ込みたい。
cat $i | 適当な処理 > $FILE.doc
done
0418名無しさん@お腹いっぱい。
2005/07/06(水) 13:17:19> for i in `ls *txt`
for i in *txt じゃだめなん?
0419名無しさん@お腹いっぱい。
2005/07/06(水) 14:24:30http://www.linux.or.jp/JM/html/GNU_bash/man1/bash.1.html#lbAZ
sedなら sed 's/¥.[^¥.][^¥.][^¥.]$//'
0420名無しさん@お腹いっぱい。
2005/07/06(水) 14:53:56ふつー、basenameだろ。
FILE=`basename "$i" .txt`
cat "$i" | 適当な処理 > "$FILE".doc
さらにいうとcatも要らんな。
FILE=`basename "$i" .txt`
適当な処理 < "$i" > "$FILE".doc
で桶。
ファイルネームが含まれる場合、いつも" "で囲う癖を付けた方がいいよ。
0421417
2005/07/06(水) 15:54:41basename って初めてしったよ。。。
>>420
ファイルネームが含まれるときは、"" で囲った方がいいのは、
なんでかしらん? ようわからん。。。
0422名無しさん@お腹いっぱい。
2005/07/06(水) 16:19:180423名無しさん@お腹いっぱい。
2005/07/06(水) 21:49:30シェルスクリプトなら、/etc とか /bin の下にあるのを
参考にすると勉強になると思うよ。
0424名無しさん@お腹いっぱい。
2005/07/07(木) 23:45:15何か意味があってそうしてるんでしょうか?
0425名無しさん@お腹いっぱい。
2005/07/07(木) 23:53:100426名無しさん@お腹いっぱい。
2005/07/07(木) 23:54:09ちがうな。。。。
0427名無しさん@お腹いっぱい。
2005/07/07(木) 23:57:080428名無しさん@お腹いっぱい。
2005/07/08(金) 00:09:38ls -lだと分までしかでないんだけど。
0429名無しさん@お腹いっぱい。
2005/07/08(金) 00:11:540430名無しさん@お腹いっぱい。
2005/07/08(金) 00:35:50あんがと。
0431No Gnus is good news
2005/07/08(金) 00:41:35perl -e '@stat=stat("/"); print localtime($stat[9]) . "\n";'
0432No gnus is bad news
2005/07/08(金) 00:53:18emacs --batch --eval '(princ (format-time-string "%r\n" (nth 5 (file-attributes "'$foo'"))))'
冗談です^^;;
0433名無しさん@お腹いっぱい。
2005/07/08(金) 09:30:44と思ったら zsh は stat が builtin なのね orz
0434名無しさん@お腹いっぱい。
2005/07/08(金) 09:31:12でもお前らいろいろありがとうな。
0435名無しさん@お腹いっぱい。
2005/07/08(金) 10:13:57date: illegal option -- r
だせぇー。やっぱGNU date必須だな。
0436名無しさん@お腹いっぱい。
2005/07/08(金) 10:20:07usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ...
[-f fmt date | [[[[[cc]yy]mm]dd]HH]MM[.ss]] [+format]
0437名無しさん@お腹いっぱい。
2005/07/08(金) 10:39:16Sun Sep 9 10:46:40 JST 2001
個人的にはこれができる FreeBSD の date の方が GNU date より重宝する。
GNU date でもできなくはないんだけどさ。
% date -d "$(($(date +%s) - 1000000000)) seconds ago"
Sun Sep 9 10:46:40 JST 2001
0438名無しさん@お腹いっぱい。
2005/07/08(金) 10:42:40どの zsh よ?
0439名無しさん@お腹いっぱい。
2005/07/08(金) 14:01:07GNU者うざい。
0440名無しさん@お腹いっぱい。
2005/07/08(金) 14:13:00(゚Д゚)ハァ?
0441名無しさん@お腹いっぱい。
2005/07/08(金) 15:55:26その目的ならおれはこれでいいや。
perl -e 'print scalar localtime 1000000000'
0442名無しさん@お腹いっぱい。
2005/07/09(土) 00:40:44書式は --time-style で好きなように
0443名無しさん@お腹いっぱい。
2005/07/09(土) 01:12:54> cat hoge.txt
20050708 aaa AAA
20050709 bbb BBB
20050710 ccc CCC
っていうファイルがあったとして、感覚的には、
grep 20050709 hoge.txt | read STR1 STR2 STR3
みたいな感じで、
STR1 に 20050709
STR2 に bbb
STR3 に BBB
を入れたいです。
何かうまい手はないでしょうか?
よろしくお願いします。
0444名無しさん@お腹いっぱい。
2005/07/09(土) 01:16:47GNU者うざい。
0445名無しさん@お腹いっぱい。
2005/07/09(土) 01:19:06perlのワンライナーをシェルスクリプトに入れるのって
どうなんだろう
そのうちどうせなら全部perlで書いたほうが、はやいし
移植性も高いかも?
とかそんなようなことを思ったりして
0446名無しさん@お腹いっぱい。
2005/07/09(土) 01:25:10え、漏れは emacs のワンライナーをシェルスクリプトに入れているけど。。。
0447名無しさん@お腹いっぱい。
2005/07/09(土) 01:28:25というか、その「感覚的には」のくだり
それそのものがやりたいわけじゃないのよね?
set -- `grep 20050709 hoge.txt` とかいう話でもないだろうし。
0448443
2005/07/09(土) 01:41:15やりたいことは、
STR1 に 20050709
STR2 に bbb
STR3 に BBB を入れることです。
grep 20050709 hoge.txt | read STR1 STR2 STR3
↑で入ります?
自分の環境だと、STR1,2,3 とも空になってしまうのですが。
0449名無しさん@お腹いっぱい。
2005/07/09(土) 01:44:480450443
2005/07/09(土) 02:00:16はい。ソースを貼り付けられないのが悔しいのですが、
ちゃんと、${STR1} で参照しております。
普通は
grep 20050709 hoge.txt | read STR1 STR2 STR3
で、うまくいくものなのでしょうか?
ちなみに、
read STR1 STR2 STR3 < hoge.txt
だと、
STR1 に 20050708
STR2 に aaa
STR3 に AAA が入ってくれます。
0451名無しさん@お腹いっぱい。
2005/07/09(土) 02:03:23とりあえずファイル経由すれば?
0452名無しさん@お腹いっぱい。
2005/07/09(土) 02:11:24zsh だと上手くいったけど、bash はダメだった
0453名無しさん@お腹いっぱい。
2005/07/09(土) 02:21:24bash-3.00$ read STR1 STR2 STR3 < <(grep 20050709 hoge.txt)
0454No Gnus is good news
2005/07/09(土) 02:27:06the output show up in $variable when the read command finishes?
http://www.unixguide.net/unix/bash/E4.shtml
0455名無しさん@お腹いっぱい。
2005/07/09(土) 02:27:27pipeの後に置かれたreadはsubshellで実行されるため、結果の変数は親からは見えません。
>>447のようにgrepをsubshellに回すか、
grep 20050709 hoge.txt | (read STR1 STR2 STR3; echo $STR1 $STR2 $STR3)
subshellの中で完結させるとよいでしょう。
0456443
2005/07/09(土) 02:44:28451さんの言う通り、ファイル経由にしようかと思います。
>455
なるほど、勉強になりました。
ありがとうございました。
0457名無しさん@お腹いっぱい。
2005/07/09(土) 02:45:560458名無しさん@お腹いっぱい。
2005/07/09(土) 02:56:02read < file
もできないんじゃなかったっけか
0459名無しさん@お腹いっぱい。
2005/07/09(土) 07:37:310460名無しさん@お腹いっぱい。
2005/07/09(土) 07:48:29にしてみ。
0461名無しさん@お腹いっぱい。
2005/07/09(土) 08:55:54それ>>455と同じ。
0462名無しさん@お腹いっぱい。
2005/07/09(土) 10:20:340463名無しさん@お腹いっぱい。
2005/07/09(土) 14:05:000464名無しさん@お腹いっぱい。
2005/07/09(土) 14:24:46おや、思考停止ですか?
0465名無しさん@お腹いっぱい。
2005/07/09(土) 15:22:40だってzshのスクリプトは、可搬性悪いし、保守性悪いじゃん。
可搬性悪=zshがどこにもインスコされてるわけじゃない
保守性悪=使える(よくわかってる)人の数は sh >>> zsh
これはzsh自体が悪いせいじゃない。でも上の状況を鑑みて、
shが存在するのにshを避けてzshでスクリプト書く理由わからん。
0466名無しさん@お腹いっぱい。
2005/07/09(土) 15:41:11sh スクリプトと見せかけて、bash スクリプトなんか腐るほどある。
Solaris 使ったことある?
0467名無しさん@お腹いっぱい。
2005/07/09(土) 15:42:210468名無しさん@お腹いっぱい。
2005/07/09(土) 15:45:41俺の仕事のリーチでは十分可搬性有るし、
状況によって、使える物は何でも使う
0469名無しさん@お腹いっぱい。
2005/07/09(土) 15:50:36.\\ /⌒\
\ ( 冫、) ウンチになぁれ
> ` ⌒ヽ
/ へ \
/ / \\
レ ノ ヽ_つ
/ / ・*.・:
/ /| :。 *.・
( ( 、 ★。:’*
| |、 \ 。・.*・; ・
| / \ ⌒l ;* ・。;*★ 人・
| | ) / ・ ★・ (_ );; * 。・
ノ ) し' ・ * (__) * ・。・
(_/ 。*;>>465(●´ー`●) ★.* ’★
0470名無しさん@お腹いっぱい。
2005/07/09(土) 16:29:06「zshの入ってるPC」とか
「俺の仕事では」とか
「ウンチになぁれ」とか
バカなのかな?
0471名無しさん@お腹いっぱい。
2005/07/09(土) 16:39:19同意。
反論するなら
・zsh は可搬性が高いかどうか
・zsh は保守性が高いかどうか
にするべきだろう。
「可搬性や保守性は必要ない」っていう主張は、
「zsh は可搬性や保守性が低い」のは認めているんだよな。
0472名無しさん@お腹いっぱい。
2005/07/09(土) 16:39:32狭いリーチだな
0473名無しさん@お腹いっぱい。
2005/07/09(土) 16:44:13可搬性や保守性が高くないと使えないという前提がそもそも
おかしいという主張なんだよ
>>472
仕事柄、古くさい環境は触る必要無いんでね
0474名無しさん@お腹いっぱい。
2005/07/09(土) 16:51:110475名無しさん@お腹いっぱい。
2005/07/09(土) 16:51:33他の人間には触らせずに一生保守し続けるという覚悟があるんだったら
別にいいんじゃないの?
我々普通の人間がとやかく言うことじゃないよ。
0476名無しさん@お腹いっぱい。
2005/07/09(土) 16:52:080477名無しさん@お腹いっぱい。
2005/07/09(土) 16:54:49何万行のスクリプトなんだよ……
0478名無しさん@お腹いっぱい。
2005/07/09(土) 16:54:52(結論1)
zsh は可搬性・保守性が低い
(結論2)
可搬性・保守性が必要ないなら使ってもいいんじゃね?
0479名無しさん@お腹いっぱい。
2005/07/09(土) 17:00:19わからんでもないが、そもそもそんなのが必要になったことがないなぁ。
>>466
Solaris は長いこと使ってるけど、sh スクリプトに見せかけた
bash スクリプトなんてものを見た記憶はない。
ksh スクリプトはたくさんあるけど、sh に見せかけてるわけじゃなく
ちゃんと ksh スクリプトだと名乗ってるし。
0480名無しさん@お腹いっぱい。
2005/07/09(土) 17:03:27Solaris で bash が入ったのって 8 くらいからじゃなかったっけ?
0481名無しさん@お腹いっぱい。
2005/07/09(土) 17:04:04$(..) を使っているスクリプトや ^ をクォートせずに使っているスクリプトとか見たことない?
0482名無しさん@お腹いっぱい。
2005/07/09(土) 17:21:17$( ) とか、export VAR=var とかはやめて欲しいな。
$(( )) は論外。
0483名無しさん@お腹いっぱい。
2005/07/09(土) 17:29:47ksh や bash スクリプトだと名乗ってるものにそういうのは見たことあるけど。
sh と bash の実体が同じならば、sh に見せかけて
実は bash スクリプトというのはありうるし、それでちゃんと動くけど、
Solaris では sh と bash はまったく違うものなんだから
bash でしか使えない文法を #!/bin/sh のスクリプトで使ったら動かない。
0484名無しさん@お腹いっぱい。
2005/07/09(土) 17:31:04イマドキの Solaris 9 4/04 でもクォートする必要あるぜ。
0485名無しさん@お腹いっぱい。
2005/07/09(土) 17:31:53次の文字はシェルに対しては特別な意味を持ち、クォートしない (
後述の説明を参照 ) 限りワードの終わりを表します。
; & ( ) | ^ < > 復帰改行 空白文字 タブ
0486名無しさん@お腹いっぱい。
2005/07/09(土) 17:45:060487名無しさん@お腹いっぱい。
2005/07/09(土) 17:47:03^ は昔のパイプの意味なんだけど、
少なくともSolaris 2.5あたりの時代にすでにパイプの意味はなくなり、
^ はただの文字として扱われるようになっているはず。
マニュアルの記述が古いだけ。
0488名無しさん@お腹いっぱい。
2005/07/09(土) 17:51:41試してから言えよ。
% /bin/sh -c 'echo a^ls'
CHANGES Makefile.in config.guess config.status doc lib named.run
COPYRIGHT README config.h config.sub docutil libtool.m4 version
FAQ acconfig.h config.h.in configure install-sh ltmain.sh win32utils
LOG aclocal.m4 config.h.win32 configure.in isc-config.sh make
Makefile bin config.log contrib isc-config.sh.in mkinstalldirs
0489名無しさん@お腹いっぱい。
2005/07/09(土) 17:52:26は知ったか決定だな。
0490名無しさん@お腹いっぱい。
2005/07/09(土) 17:53:37ほほー、そーなるんですか。なるほど。
0491名無しさん@お腹いっぱい。
2005/07/09(土) 18:02:56The application shall quote the following characters if they are to represent themselves:
| & ; < > ( ) $ ` \ " ' <space> <tab> <newline>
0492名無しさん@お腹いっぱい。
2005/07/09(土) 18:07:13for i in {000..099}; do touch ${i}; done
0493名無しさん@お腹いっぱい。
2005/07/09(土) 18:10:44正気かよ
毎回echo()とかいう関数作ってるのか
そういうの気にするぐらいならperlスクリプトでも書いてろよ
シェルスクリプトよりよっぽどポータブルだから
0494名無しさん@お腹いっぱい。
2005/07/09(土) 18:11:460495名無しさん@お腹いっぱい。
2005/07/09(土) 18:11:54[連番のH画像を一気にダウンロードする]スレ的なネタだな
zshとwgetの組み合わせはもはや定番であろう
0496名無しさん@お腹いっぱい。
2005/07/09(土) 18:13:47kshで
set -x
としたときの出力を関数の中まで出力できるように(shやbashのように)すればどうすればいいの?
0497名無しさん@お腹いっぱい。
2005/07/09(土) 18:14:01その程度なら、seq jot printfあるいは頑張ってexprで書けるものを、
可搬性を犠牲にしてまでzshですか。
0498名無しさん@お腹いっぱい。
2005/07/09(土) 18:14:37typeset -Z3 i=0
にしてカウントアップすればいいんじゃないか?
0499名無しさん@お腹いっぱい。
2005/07/09(土) 18:15:070500名無しさん@お腹いっぱい。
2005/07/09(土) 18:17:09PDP-11 上の AT&T UNIX でも正しく動作する事
0501名無しさん@お腹いっぱい。
2005/07/09(土) 18:17:120502名無しさん@お腹いっぱい。
2005/07/09(土) 18:17:52seqだのjotだののどこらへんがポータブルなんですか
awkで書けよ
0503名無しさん@お腹いっぱい。
2005/07/09(土) 18:18:56でもbashとかtcshとかkshとかは入れるんでしょ
0504名無しさん@お腹いっぱい。
2005/07/09(土) 18:19:560505名無しさん@お腹いっぱい。
2005/07/09(土) 18:21:30typesetに可搬性はない。
可搬性なら、
for i in `yes '' | cat -n`
が最強かな。あと、ゼロ揃えだけ別処理すること。
0506名無しさん@お腹いっぱい。
2005/07/09(土) 18:23:29これ買いですか?
http://www.amazon.co.jp/exec/obidos/tg/detail/-/books/4756101623/contents/249-1104321-8243555
0507名無しさん@お腹いっぱい。
2005/07/09(土) 18:25:450508名無しさん@お腹いっぱい。
2005/07/09(土) 18:29:47perlで書くと、起動スクリプトには使えない。
0509名無しさん@お腹いっぱい。
2005/07/09(土) 18:32:15教えない。
0510名無しさん@お腹いっぱい。
2005/07/09(土) 18:32:27そんだけかよ。
起動スクリプトなんぞ、ポータビリティが不要な最たるものだと思うが。
ポータブルな起動スクリプトって、何か意味あんのか?
0511名無しさん@お腹いっぱい。
2005/07/09(土) 18:34:110512名無しさん@お腹いっぱい。
2005/07/09(土) 18:35:32可搬性だとか理論武装してるだけなんだろ?
笑っちゃうって
可搬性気にするぐらいならシェルスクリプトなんぞ書くなっての
0513名無しさん@お腹いっぱい。
2005/07/09(土) 18:39:37可搬性がどーでもいいならCで書くなぁ。
0514名無しさん@お腹いっぱい。
2005/07/09(土) 18:40:370515名無しさん@お腹いっぱい。
2005/07/09(土) 18:42:34だから、毎回あんたはecho()とかいう関数を定義するわけね
>>514
得ろ画像連番は一回こっきりのワンライナーだからいちいちスクリプトに
落とさんだろ
だからこそのzshなんだよ
0516名無しさん@お腹いっぱい。
2005/07/09(土) 18:44:400517名無しさん@お腹いっぱい。
2005/07/09(土) 18:48:06スクリプトは /bin/sh 互換で書くよ。
それ以上のことしたいときは perl とか使う。
っていう人が多いんじゃないの。
0518名無しさん@お腹いっぱい。
2005/07/09(土) 18:49:23Cよりシェルのほうがポータブルだと本当に言えるのだろうか。
Cのバイナリは確かにポータブルではないが、ソースレベルならどうか。
0519名無しさん@お腹いっぱい。
2005/07/09(土) 18:51:17シェルのシンタクス上は/bin/sh互換のスクリプトであるからと言って
使ってるコマンド群の仕様はシステムによっててんでまちまちなんだから、
そのスクリプトがポータブルであるということにはならない。
という話をしているのだが。
echo()とかいう関数、という例は無論そのことを言っている。
0520名無しさん@お腹いっぱい。
2005/07/09(土) 18:51:19echoの問題なら、関数定義までしなくても、
echo -nやバックスラッシュのエスケープを使わなければ問題ない。
問題になるケースは少ないが、問題な場合は
Solarisだけ場合分けすれば済むケースがほとんど。
あと、複雑なエスケープを使うなら、
echoじゃなく、printfを使う。
0521名無しさん@お腹いっぱい。
2005/07/09(土) 18:52:05> echo -nやバックスラッシュのエスケープを使わなければ
やだー使いたいー(ジタバタ
0522名無しさん@お腹いっぱい。
2005/07/09(土) 18:54:44Cのソースが本当にポータブルなら、
なぜ毎回./configureでMakefileを作り直す必要があるのか。
0523名無しさん@お腹いっぱい。
2005/07/09(土) 18:56:31MakefileはCのソースではないからです。
>>520
>>500によれば、printf(1)はPOSIX.2に含まれていようが含まれていまいが
ポータブルではないそうです。
0524名無しさん@お腹いっぱい。
2005/07/09(土) 18:58:57君は echo -n も使わないのかね?
0525名無しさん@お腹いっぱい。
2005/07/09(土) 19:02:00printf ハぽーたぶるなんですか?
0526名無しさん@お腹いっぱい。
2005/07/09(土) 19:05:55printfのすべての機能を使おうとするとポータブルでないだけであって、
echo -nやechoの\エスケープの代用の範囲のみなら
printfはポータブルと考えて良い。
>>524
そうだよ。
新人がecho -nとか平気で書くのでいつも叱ってるよ。
0527名無しさん@お腹いっぱい。
2005/07/09(土) 19:07:49むしろecho -nなシステムのほうが今時は少ない気がするんだが
元BSDユーザが新人君に多いの?
0528名無しさん@お腹いっぱい。
2005/07/09(土) 19:09:02printf(1)って4.3BSD-Reno以降でしょ
>>500的にはポータブルじゃないんだそうです
0529名無しさん@お腹いっぱい。
2005/07/09(土) 19:09:31bashだとecho -n使える。
0530名無しさん@お腹いっぱい。
2005/07/09(土) 19:10:260531名無しさん@お腹いっぱい。
2005/07/09(土) 19:13:16どんなアホを指しとるんだ
無駄な努力はせずに素直にPerlを使え、と君も言いたいわけだね?
0532名無しさん@お腹いっぱい。
2005/07/09(土) 19:13:51なるほど
0533名無しさん@お腹いっぱい。
2005/07/09(土) 19:14:11./configure は config.hとかも作り直すわけだが、
config.hもC言語じゃないのかな?
0534名無しさん@お腹いっぱい。
2005/07/09(土) 19:15:08まあいいじゃないの、config.hのひとつやふたつ(w
……おれって、くるしい?
0535名無しさん@お腹いっぱい。
2005/07/09(土) 19:18:480536名無しさん@お腹いっぱい。
2005/07/09(土) 19:30:37一般論にしちゃうとジジイが時代遅れの話持ってくるから収拾がつかない。
0537名無しさん@お腹いっぱい。
2005/07/09(土) 19:34:350538名無しさん@お腹いっぱい。
2005/07/09(土) 19:37:230539名無しさん@お腹いっぱい。
2005/07/09(土) 19:39:31rshにしろよ
つか、いまどきrshとか使うなよ
とかそういう話?
0540名無しさん@お腹いっぱい。
2005/07/09(土) 19:54:14便利機能が存在するのに、使わないのは能率悪い。
もちろん特別な要件が有れば別だけど。
0541名無しさん@お腹いっぱい。
2005/07/09(土) 19:54:43"$@" を ${1+"$@"} で書かせるのヤメレ。
イマドキ意味ねー。
0542名無しさん@お腹いっぱい。
2005/07/09(土) 20:07:19djbってじじいなの?
0543名無しさん@お腹いっぱい。
2005/07/09(土) 20:09:18,. '":::::::::::::::::::::::::::::::ヽ
/:::::::::::::::::::::::::;:::ノi、:::::::ヽ
.,':::::::::::::::::::::;-ニ'/ ヽ:i::::::::ヽ
i:::n::;;:'::;;:-',,='"´ ヽi、::::::::l
!:::l.}、/ 、!:::::l
.l:::;;じ' '''''' '''''' ヽ;;!
、:;;! (●), 、(●)、.:::::il
l::、! ,,ノ(、_, )ヽ、,, .:::::/ヽ
.l;'^ヽ. -=ニ=- ' .::::::〈,' !
l::、 ゝ.、 `ニニ´ .:::::::;"ノ
!::::`ー-.、 .::::/:l:::l
.l:::::::;;;;;;i::;;l` - 、 ,..;;';;;l;;:::i::::l
i:::::::;;;;;;;':::;;l;;;;;;;;l ` ´l;;;;;;;;;l::::'::::i
0544名無しさん@お腹いっぱい。
2005/07/09(土) 20:32:070545名無しさん@お腹いっぱい。
2005/07/09(土) 21:10:240546名無しさん@お腹いっぱい。
2005/07/09(土) 21:17:46echo hoge
~$ ./hoge.sh
: bad interpreter:No such file or directory
hogeと表示したいだけなのにやってくれません!(><)
such fileって何のことですか?(><)
0547名無しさん@お腹いっぱい。
2005/07/09(土) 21:19:160548名無しさん@お腹いっぱい。
2005/07/09(土) 21:22:22Winでエディットしただろ。
#!/bin/sh の後ろに ^M が付いていて、
/bin/sh^M なんてコマンドは知らんと言ってる。
0549名無しさん@お腹いっぱい。
2005/07/09(土) 21:38:08ありがとうございましたm(><)m
0550名無しさん@お腹いっぱい。
2005/07/09(土) 22:33:480551名無しさん@お腹いっぱい。
2005/07/09(土) 23:04:180552名無しさん@お腹いっぱい。
2005/07/09(土) 23:08:430553名無しさん@お腹いっぱい。
2005/07/09(土) 23:14:270554名無しさん@お腹いっぱい。
2005/07/09(土) 23:23:160555名無しさん@お腹いっぱい。
2005/07/09(土) 23:24:410556名無しさん@お腹いっぱい。
2005/07/09(土) 23:26:24bash: ./jfoeiajosh: /bin/saofeaoijfeaoi: bad interpreter: そのようなファイルやディレクトリはありません
と言われたが、#!/bin/saofeaoijfeaoi^Mにしたら、
: bad interpreter: そのようなファイルやディレクトリはありません
になったので、エスパーではないと思われるが、よくすぐに分かったな。
0557名無しさん@お腹いっぱい。
2005/07/09(土) 23:42:15エスパー出現じゃ仕方が無いか。
0558名無しさん@お腹いっぱい。
2005/07/10(日) 00:11:270559名無しさん@お腹いっぱい。
2005/07/10(日) 00:26:010560名無しさん@お腹いっぱい。
2005/07/10(日) 02:32:18プ。FAQだよ、騒ぐな馬鹿ども。
0561名無しさん@お腹いっぱい。
2005/07/10(日) 02:34:050562名無しさん@お腹いっぱい。
2005/07/10(日) 02:42:330563名無しさん@お腹いっぱい。
2005/07/10(日) 04:28:380564名無しさん@お腹いっぱい。
2005/07/10(日) 12:08:06dir=(`pwd`);
if [ ! -d "$dir" ];then
echo "$dirは存在しないかディレクトリではありません";
exit 1;
fi
というスクリプトで今いるデレクトリが
"C:\Documents and Settings\user\My Documents"というように空白を含む
デレクトリだとうまくいきません. どうすればいいでしょうか?
0565名無しさん@お腹いっぱい。
2005/07/10(日) 12:24:260566名無しさん@お腹いっぱい。
2005/07/10(日) 12:27:590567564
2005/07/10(日) 12:38:520568名無しさん@お腹いっぱい。
2005/07/10(日) 12:41:270569名無しさん@お腹いっぱい。
2005/07/10(日) 16:07:32dir=`pwd`で、スペースもちゃんと保存される。
もちろん、値を使う時は"$dir"で" "が要る。
dir=(`pwd`)の場合は、配列への代入になってしまうので、
配列の要素解釈の際にスペースが解釈されてしまうため、
dir=("`pwd`")とする必要がある。
でも、>>564 は配列とは知らずに=( )を使ったのだろうから、
この書き方は忘れた方がいい。
なお、bashが$PWDをセットするからといって、
こういうのに頼ってはいけない。
0570名無しさん@お腹いっぱい。
2005/07/10(日) 16:17:54> なお、bashが$PWDをセットするからといって、
> こういうのに頼ってはいけない。
と老害が申しております。。。。
0571名無しさん@お腹いっぱい。
2005/07/10(日) 16:18:470572名無しさん@お腹いっぱい。
2005/07/10(日) 18:43:22cygwin なんて互換性を無視していい環境の最たるものだと思うが。
0573名無しさん@お腹いっぱい。
2005/07/10(日) 18:51:000574123
2005/07/12(火) 02:22:060575名無しさん@お腹いっぱい。
2005/07/12(火) 02:25:54ここじゃなくて自分が使ってるOSのスレで聞くべし。
0576名無しさん@お腹いっぱい。
2005/07/12(火) 02:42:56#自動マウントスクリプト
while true
mount usbストレージ
done
0577123
2005/07/12(火) 04:03:07大学なんでsuもrootの権限もないんですよね・・・
あのそこのusbストレージ
と二音後で書いてあるところはどうすれば・・・・
0578名無しさん@お腹いっぱい。
2005/07/12(火) 04:33:190579名無しさん@お腹いっぱい。
2005/07/12(火) 07:03:04二音語って、
‐・・・ ・‐ ‐・‐ ・‐
みたいに「・」と「‐」の二音で会話する言語のことですか?
0580名無しさん@お腹いっぱい。
2005/07/12(火) 07:43:32whileループでマウントするのは重杉で非効率。
やむを得ずそれでやるとしても、ループ中に
sleep 1 とか入れれ。
Solarisならvoldとかautomountとかでやるのが
正攻法だろな。いずれにしても、その設定をするために
root権限は要る。設定完了後はrootじゃなくても
自動的にマウントできるようになる。
0581名無しさん@お腹いっぱい。
2005/07/12(火) 14:28:26以前、zshのmanを見ていた時、zshにsocketの機能があるのに
ビックラこきました。
shellでsocketって、何に使うねん。と思ったのですが、
shellでsocketって、メジャーなんでしょうか?
0582名無しさん@お腹いっぱい。
2005/07/12(火) 14:34:31zftp
0583名無しさん@お腹いっぱい。
2005/07/12(火) 19:13:060584名無しさん@お腹いっぱい。
2005/07/13(水) 14:01:50***********************************
#!/bin/sh
old_name=$1
num=1
new_name=$old_name$num
while [ -e $new_name ]
do
num=`expr $num + 1`
new_name=$old_name$num
done
****************************
num=
new_name=
を2回も書いてる所とかが気にくわないんですが、どうにかできるものですか?
0585名無しさん@お腹いっぱい。
2005/07/13(水) 14:12:22while [ -e $1$num ]
do
num=`expr $num + 1`
done
new_name=$1$num
0586名無しさん@お腹いっぱい。
2005/07/13(水) 14:16:15#!/bin/sh
old_name=$1
num=1
while [ -f "$old_name$num" ]
do
num=`expr $num + 1`
done
new_name=$old_name$num
だな。
new_nameの代入をループ外に出して1行減らした。
Solarisではtest -eが使えないので
test -fに変えた。
あと、引数として使う時は" "で囲む。(直接代入なら囲まなくていい)
0587名無しさん@お腹いっぱい。
2005/07/13(水) 14:19:36>585,586
ありがとうございます。
むー。なんか俺、無駄な事しまくってますね。
0588名無しさん@お腹いっぱい。
2005/07/13(水) 14:33:23old_name=$1
for ((num=1; ; num++)) {
[ ! -e "$old_name$num" ] && break
}
new_name=$old_name$num
と書ける。
0589名無しさん@お腹いっぱい。
2005/07/13(水) 14:57:22++ってシェルスクリプトでも使えるんですね。
やってみたいお年ごろなので一行にまとめてみました。
for ((num=1; ; num++)) { [ ! -e "$1$num" ] && { new_name=$1$num ; break ;} }
0590名無しさん@お腹いっぱい。
2005/07/13(水) 15:04:180591名無しさん@お腹いっぱい。
2005/07/13(水) 20:28:520592名無しさん@お腹いっぱい。
2005/07/13(水) 20:33:06何なんだろうか
0593名無しさん@お腹いっぱい。
2005/07/13(水) 20:41:530594名無しさん@お腹いっぱい。
2005/07/13(水) 21:01:55ちったぁぐぐったうえで聞けや、この腐れぼんくら
ttp://www.google.com/search?hl=ja&q=posix&btnG=Google+検索&lr=lang_ja
0595名無しさん@お腹いっぱい。
2005/07/13(水) 21:04:23posixってどこで読めの?
0596名無しさん@お腹いっぱい。
2005/07/13(水) 21:22:25dejure standard ではなく defact standard を使うのは当然でしょ。
ちゃんと象牙の塔に引き篭もっててください。
0597名無しさん@お腹いっぱい。
2005/07/13(水) 21:24:31現存の環境で動かなきゃ意味がない。
となると、必然的にBourne互換スクリプトになる。
0598名無しさん@お腹いっぱい。
2005/07/13(水) 21:31:07いや、書くか?
それとも、ansi2knr.c?
0599名無しさん@お腹いっぱい。
2005/07/13(水) 21:32:16dejure standardはなんですか
0600名無しさん@お腹いっぱい。
2005/07/13(水) 21:34:19毎回定義するんだな?
0601名無しさん@お腹いっぱい。
2005/07/13(水) 21:37:10またお前か。引っ込んでろ。
0602名無しさん@お腹いっぱい。
2005/07/13(水) 21:37:12何回も書くほど面白いネタじゃないぞ。
0603名無しさん@お腹いっぱい。
2005/07/13(水) 21:42:22>Posixなんて机上の空論。
ええ?そうなんですか?
少なくともHP-UXの/bin/shはPOSIX準拠だと謳っているから
そう信じてたんですが私は騙されてたんでしょうか?
0604名無しさん@お腹いっぱい。
2005/07/13(水) 21:54:41今だと/bin/sh-->/usr/bin/sh(shell-posix)なのかな?
昔はそうじゃなかった気がする
http://www.bookshelf.jp/texi/autoconf/autoconf-ja_10.html
あたりが答えなのかねえ
0605名無しさん@お腹いっぱい。
2005/07/13(水) 21:57:220606603
2005/07/13(水) 22:10:28>今だと/bin/sh-->/usr/bin/sh(shell-posix)なのかな?
今、現物を確認できませんが、
たしか/bin/shと/usr/bin/shは両方実体ファイルで、
中身はdiffで比べると同一だったと思います。
それと/sbin/shは違うシェルだったような・・・
0607名無しさん@お腹いっぱい。
2005/07/13(水) 22:13:13lrwxrwxrwx 1 root root 9 Aug 23 2004 /bin -> ./usr/bin
0608603
2005/07/13(水) 22:22:36それはHP-UXの話ですか?
だとしたら盲点ですた・・・
じゃあやっぱりHP-UXの/bin/shはPOSIX準拠なのだと信じて
生きていきます・・・
0609名無しさん@お腹いっぱい。
2005/07/13(水) 22:29:17いや、Solarisです。
ちなみに、/sbin/sh はスタティックリンク
0611名無しさん@お腹いっぱい。
2005/07/13(水) 22:41:11そういうシェルを/binに置くのって、どうなのよ
0612名無しさん@お腹いっぱい。
2005/07/13(水) 22:41:5510では/sbin/sh --> /bin/sh
0613名無しさん@お腹いっぱい。
2005/07/13(水) 22:45:41Solarisには、/usr/bin/cdとか/usr/bin/umaskとか、
外部コマンド版が存在しますが、
これって意味あるんですか?
実際、実行しても当然期待通り動作しませんが・・
0614名無しさん@お腹いっぱい。
2005/07/13(水) 22:46:16ってことでOK?
/bin/shが何者だかわかりゃしねえ
0615名無しさん@お腹いっぱい。
2005/07/13(水) 22:47:44rootは/sbin/shを使うから問題ない。んじゃね?
0616名無しさん@お腹いっぱい。
2005/07/13(水) 22:52:10そこまでいくと、もう…
0617名無しさん@お腹いっぱい。
2005/07/13(水) 22:54:49に色々なシステム環境の説明があるな
1)HP-UXでも/bin-->/usr/bin
2)/sbin/shは/usr/bin/sh(sh-posix)のstatic link版
3)昔あったbourne互換シェルは消えた
ってことだ
>>615
てことだから、/sbin/shもterminfo見てるんじゃないかな
0618名無しさん@お腹いっぱい。
2005/07/13(水) 23:01:5610では、/bin は /usr/bin とは別物なの?
0619名無しさん@お腹いっぱい。
2005/07/14(木) 16:55:32変数に取り込もうと、
err_message=`hoge 2>&1`
とすると、メッセージが変数に取り込めずに直接表示されてしまいます。
仕方なく、
err_message=`hoge 2>&1 | cat`
と、catをかますとうまくいきます。
これってknown Bugですか?
なお、hoge自体がファイル記述子2に出力していることは確認済みです。
0620名無しさん@お腹いっぱい。
2005/07/14(木) 18:03:44-current だと以下のように期待通りの動作をしていますけど,
バージョンは?
$ msg=`ls -z 2>&1`
$ echo $msg
ls: illegal option -- z usage: ls [-ABCFGHLPRSTWZabcdfghiklmnopqrstuwx1] [file ...]
$
0621名無しさん@お腹いっぱい。
2005/07/14(木) 18:33:50hoge='ENV_HOGE'
の状態で
環境変数ENV_HOGEにアクセスしたいんだけど
${$hoge} では怒られるんだけど、どう書けばいいのかな、
それともこういうポインタ的なのは_?
0622名無しさん@お腹いっぱい。
2005/07/14(木) 18:37:31eval でがんばれ。
0623名無しさん@お腹いっぱい。
2005/07/14(木) 19:34:29$ uname -sr
FreeBSD 5.4-RELEASE
$ err_message=`umask 999 2>&1`
umask: Illegal number: 999$
$ echo "$err_message"
$ err_message=`umask 999 2>&1 | cat`
$ echo "$err_message"
umask: Illegal number: 999
$
つーことで、5.4でもバグってます。
currentでは直ってるんですね?
0624名無しさん@お腹いっぱい。
2005/07/14(木) 19:38:29eval echo \$$hoge
0625620
2005/07/14(木) 22:00:34commitlog 漁ってみたけど, それらしき patch はあたっていない.
cvs diff -r RELENG_5_4_0_RELEASE やってみたけど, それらしき差分は見当たらない.
なんで, そんな現象になるんだろ?
0626名無しさん@お腹いっぱい。
2005/07/15(金) 00:28:32外部コマンドでそうなる例はある?
0627名無しさん@お腹いっぱい。
2005/07/15(金) 00:49:01超致命的バグが発見できないとは。
0628名無しさん@お腹いっぱい。
2005/07/15(金) 01:17:53いくつか試したところ
ok: cd eval alias
ng: umask pwd dot set
ちなみに"AAA=`(umask 999) 2>&1`"は大丈夫だ
0629621
2005/07/15(金) 01:35:08どうもっす。
evalでいいのかな``で囲むやつでがんばってみた。
`env $hoge` でなんとかうまくいきますた。
でもなんつか、ちと格好悪いね。
${${hoge}} の方がポインタちっくでいい感じだと
思うんだけど… (´・ω・`)
0630名無しさん@お腹いっぱい。
2005/07/15(金) 01:37:51(umaskの場合) ashはsubstitution commandがbuiltinだとsubshellをforkせずに
済ませようとするようです。
bashとpdkshは普通にforkし、ksh93はforkしませんがbash/pdkshと同じ結果を返します。
最適化しようとしてenbugしたっぽいですね。
0632名無しさん@お腹いっぱい。
2005/07/15(金) 01:47:11要するにPerlのシンボリックリファレンスみたいな機能が欲しかった、と
0633名無しさん@お腹いっぱい。
2005/07/15(金) 09:38:24> ${${hoge}} の方がポインタちっくでいい感じだと
それって \$$hoge じゃん。
0634名無しさん@お腹いっぱい。
2005/07/15(金) 12:04:21そう書きたきゃ、
eval echo \${${hoge}}
でできるよ。
あと、 `env $hoge` じゃなくて、
echo `printenv $hoge`
だよね。
0635名無しさん@お腹いっぱい。
2005/07/15(金) 12:21:15シェルスクリプトにかっこよさを期待されてもな。
0636名無しさん@お腹いっぱい。
2005/07/15(金) 13:13:53(1)バックアップ作成、ログ取得
# cd /backup (←作ったDIR)
# tar cvfz backup`date +%Y%m%d`.tar.gz --atime-preserve /home >bulog`date +%Y%m%d`.txt
(2)現在のファイルを取得
# ls -1 | grep backup[0-9][0-9][0-9][0-9][0-1][0-9][0-3][0-9] > now_data.txt
(3)7世代までのファイルを取得
# tail -7 now_data.txt >days_data.txt
(4)2つのファイルを比較、削除ファイル抽出
# diff now_data.txt days_data.txt > differ_data.txt
(5)差分を消す ←今ここ
# ??? differ_data.txt
な感じで考えてみましたが、行き詰ってます。
diffで差分を拾ってきた結果↓から
-----
[root@xxxxx backup]# cat differ_data.txt
1d0
< backup20050709.tar.gz
-----
1d0 とか < とかを省いて「backup????????.tar.gz」の部分だけを拾ってきたリストを作って、
「rm -f < differ_data.txt」みたいに一発で消せる様に出来ないものなのでしょうか。
#もっとスマートな方法が有ったら教えてくだちぃ…。
0637名無しさん@お腹いっぱい。
2005/07/15(金) 13:30:01そもそもdump(8)を避けた理由は何かあるんでしょうか?
dumpなら普通に世代バックアップできるし。
dump先を普通のファイルにしておけば、そこからrestore -iで取り出す
手間もtarと大差ないし。
0639名無しさん@お腹いっぱい。
2005/07/15(金) 13:36:26早速のレス有り難う御座います。
dumpを避けた理由は…dumpというコマンドを知りませんでした。
手元の「RedHatLinux コマンドリファレンス」に載っていない様で…(汗
とりあえず一旦
man dump
してみます、有り難う御座いましたー!
0640名無しさん@お腹いっぱい。
2005/07/15(金) 13:37:44○ポケットリファレンス
(技術評論社)
0641名無しさん@お腹いっぱい。
2005/07/15(金) 13:46:58diffじゃなくてcommを使う。
rm -f `comm -23 now_data.txt days_data.txt`
で、一発で消せる。
ただし、now_data.txtとかはsort済みのこと。
0642名無しさん@お腹いっぱい。
2005/07/15(金) 14:39:55行けました!
有り難う御座います!!
#さすがUNIX板(^^*
0643名無しさん@お腹いっぱい。
2005/07/15(金) 19:41:120644名無しさん@お腹いっぱい。
2005/07/15(金) 20:13:070645名無しさん@お腹いっぱい。
2005/07/15(金) 23:15:19スクリプトは本来書き捨てるためのモノでもあり以下略。
0646名無しさん@お腹いっぱい。
2005/07/15(金) 23:21:190647名無しさん@お腹いっぱい。
2005/07/16(土) 00:16:100648名無しさん@お腹いっぱい。
2005/07/16(土) 01:13:36hoge="aaa"
if echo $hoge | grep -q "aaa"; then
echo ATARI
fi
とやると ATARI と表示されます。
[]でくくっても同じ。 評価された結果って
何を見てるんでしょうか?わからなくなってきました。
0649名無しさん@お腹いっぱい。
2005/07/16(土) 01:22:34当然だろ。
0650名無しさん@お腹いっぱい。
2005/07/16(土) 01:23:020651名無しさん@お腹いっぱい。
2005/07/16(土) 04:51:04#!/bin/sh
hoge="aaa"
echo $hoge | grep -q "aaa";
if [ $? = 1 ] ; then
echo ATARI
elif [ $? = 0 ] ; then
echo HAZURE
fi
0652名無しさん@お腹いっぱい。
2005/07/16(土) 05:16:05シェルのifやwhileでは0が真として評価されるんでつよ
って、そういう話じゃなくて?
0653名無しさん@お腹いっぱい。
2005/07/16(土) 11:10:13であれば、個数をカウントするから、ヒットしない場合が”0”
って、そういう話じゃなくて?
0654名無しさん@お腹いっぱい。
2005/07/16(土) 11:12:130655648
2005/07/16(土) 15:28:17やっぱそうやらないと駄目なんすね
>>652-653
いや、正にそういう話です。要するに 0が真として評価されるからなんですね。
例えば、正常終了時のリターンコードが0でないようなコマンドの場合、偽と
判断されるのかな、紛らわしいな…
0656名無しさん@お腹いっぱい。
2005/07/16(土) 16:42:56>>4のこともたまには思い出してあげて下さい。
0657名無しさん@お腹いっぱい。
2005/07/16(土) 17:10:16フォー!
0658名無しさん@お腹いっぱい。
2005/07/16(土) 18:22:10> 判断されるのかな、紛らわしいな…
もしかして、アホですか?
0659名無しさん@お腹いっぱい。
2005/07/16(土) 18:35:56> もしかして、アホですか?
それを言っちゃだめだって。
0660名無しさん@お腹いっぱい。
2005/07/16(土) 18:54:08紛らわしいも何も、それが仕様なんだから慣れろ
もっと詳細な制御がしたければ、$?に対して
Case文でも使えばいいだけの話だ
0661名無しさん@お腹いっぱい。
2005/07/16(土) 22:46:020662名無しさん@お腹いっぱい。
2005/07/16(土) 23:05:21そんなコマンドないよ。
>>653
が言ってる grep -c も、
文字列が見つからなかった場合、
「標準出力に」0が表示され、
「終了ステータス」は1になるので、無問題だよ。
0663名無しさん@お腹いっぱい。
2005/07/17(日) 12:52:340664名無しさん@お腹いっぱい。
2005/07/17(日) 12:59:06シェルスクリプト中でも、ふつうに、
su -c 'hoge1; hoge2'
または
sudo hoge
でいいと思うけど。
あるいはsetuidのスクリプトを呼び出すとか。
0665名無しさん@お腹いっぱい。
2005/07/17(日) 13:20:220666名無しさん@お腹いっぱい。
2005/07/17(日) 13:28:55セキュリティホールになるよ。
ググるとFAQか何かがすぐ出てくると思う。
0667名無しさん@お腹いっぱい。
2005/07/17(日) 13:39:56問題がない使い方で使うなら桶。
0668名無しさん@お腹いっぱい。
2005/07/17(日) 13:43:550669名無しさん@お腹いっぱい。
2005/07/17(日) 13:48:47grepとは違って、どういう場合が正常終了なのか、
デフォでは定義されていない(常に真)になっているだけ。
0670名無しさん@お腹いっぱい。
2005/07/17(日) 15:55:59>>596
×dejure standard, defact standard
○de jure standard, de facto standard
0671名無しさん@お腹いっぱい。
2005/07/17(日) 16:34:57下のようなsrcがあってbbbだけ抜き出すのは可能ですか?
bbbは変数でgrep bbbは使えません。
---------------------------------------------------------
</td>
<td colspan=3>
<a href=/aaa/aaaa/aaa><b class="sans">テストテスト</b></a>
<br>
<font face=osaka,MS Pゴシック,arial,helvetica size=-1>
bbbbbb
</font>
-------------------------------------------------------
0672名無しさん@お腹いっぱい。
2005/07/17(日) 16:39:10「テストテスト」と「bbbbbb」の違いは何?
grep使えないのはなぜ?宿題だから?
0673名無しさん@お腹いっぱい。
2005/07/17(日) 16:39:31質問が不明確。
VAR=bbb
grep "$VAR"
ということじゃないよね?
0674名無しさん@お腹いっぱい。
2005/07/17(日) 17:05:40こうかな?
cat src | tr -d "\n" | sed -e "s,</font>,\n,g" | sed -e "s,.*<font[^>]*>,,"
0675名無しさん@お腹いっぱい。
2005/07/17(日) 20:30:470676名無しさん@お腹いっぱい。
2005/07/17(日) 20:58:37あ、コマンドオプションにも変数使えたんですね。
どうもありがとうございました。
0677名無しさん@お腹いっぱい。
2005/07/17(日) 21:24:31そんなオチかよ!
0678名無しさん@お腹いっぱい。
2005/07/18(月) 01:51:18よ。。。
0679名無しさん@お腹いっぱい。
2005/07/21(木) 13:35:37例えば.shを.batに書き直すようなツールはありますでしょうか。
ぜひ教えてください。
シェルスクリプトもバッチも知識ゼロです。
Windows板で質問したらUNIX板へ帰れって言われました。
UNIX環境の質問ではないのですが、よろしくお願いします。
0680名無しさん@お腹いっぱい。
2005/07/21(木) 13:37:03http://pc8.2ch.net/test/read.cgi/unix/1119982766/
0681名無しさん@お腹いっぱい。
2005/07/21(木) 14:24:390682名無しさん@お腹いっぱい。
2005/07/21(木) 15:04:550683679
2005/07/21(木) 15:56:48Cygwinインストールしてみました。
Shell Scriptを実行してみたところsyntax errorが出たので、
やはり知識を身につけなければいけないようです。
公式な配布物の中身をいじってないのにErrorが出るのが何でかわかりませんが・・・orz
0684名無しさん@お腹いっぱい。
2005/07/21(木) 16:00:260685名無しさん@お腹いっぱい。
2005/07/21(木) 17:01:260686名無しさん@お腹いっぱい。
2005/07/21(木) 20:20:39「エスパーきぼんぬ」「氏ね」「(゚Д゚)ハァ?」等のレスを貰う八ヶ条。
1. ハードウェア、OSのバージョン等には一字一句触れない。
2. 大切な個人情報が漏れるとまずいので、己の行った操作、変更などは秘密。
3. エラーメッセージの類は決して書かない。「エラーが出るんです」で留める。
目の前で生じている現象をそのまま具体的に書くなどもっての外。
事実より俺様の脳内解釈を優先すべし。
4. 独り言文体で必勝。
「…なんだけど、どうすればいいのかなぁ」「何が悪いんだろう?」
5. 「急いでいます」「困っています」等、自分の都合を全面に押し出す。
6. もう試したことを得意げに指摘してくる奴には、厳しく対応。
「それが駄目だったから質問してるんです」「それはもう試してみて駄目でした」
"どう"だめだったのか、本当に実際それを行ったかどうかなんか問題じゃない。
7. ストレートに答えを書かないもったいぶったレスには、逆切れで対応。
「だからどうすればいいんですか?」「分からないなら引っ込んでろやゴルァ」
示されたURL等を参照するなんて態度は、回答者を甘やかすことに他ならないので
絶対に避ける。
8. 情報は小出しに。
「エスパーきぼんぬ」 補足
上の八ヵ条を「一つでも」満たす者は質問者として不適格だということだ。
そのような悪い質問に対して答えられるのは,
質問者の意図をすべて汲み取ることのできるエスパーでもなければムリ,
という意味であって,決して,高度な技術を持つユーザに対する尊称でなはい。
まちがっても「エスパーの方,回答お願いします」
なんて痛い質問するな。つうか氏ね。
0687名無しさん@お腹いっぱい。
2005/07/21(木) 20:28:59何か勘違いをしてるっぽいので、
詳しく聞きだしてみたい。
0688名無しさん@お腹いっぱい。
2005/07/21(木) 20:38:07補足は蛇足。コピペ時にはカットよろしこ。
0689名無しさん@お腹いっぱい。
2005/07/21(木) 20:59:09これ貼るだけでいいよ。
http://myu.daa.jp/osiete/index.html
0690名無しさん@お腹いっぱい。
2005/07/21(木) 22:03:52ちょとかわいそうなのでマジレス。
シェルの種類は複数あって、拡張子が.shであっても
書式が共通しているとは限らない。
(Cygwin のやつは bash という種類。)
その「公式な配布物」が何なのかを書けば
もう少しまともなレスが得られるかも知れない。
0691名無しさん@お腹いっぱい。
2005/07/21(木) 23:01:04見つけ出すことは出来ますか?
pwdとやってもシェルスクリプトを起動させた時点でのカレント
ディレクトリしか出ないので質問しました。
0692名無しさん@お腹いっぱい。
2005/07/21(木) 23:04:280693679
2005/07/21(木) 23:22:17お騒がせしてます;
根本的にはCygwinでbashを使うことで"解決"しております。
アドバイスありがとうございました。
SyntaxErrorは行番号が出ているものの、
その行の記述が間違っていないことがわかったので、
自分が悪いと思って出し辛かった、といいますか
人に聞く前に調べようと思って、あの場では書きませんでした。
エスパーの方,回答お願いします。つうか氏ぬ。
#今回はじめて掲示板のお世話になったのですが、実際>>686のように書かれると嫌になるね。質問1つもちゃんとできない自分が。
0694691
2005/07/21(木) 23:23:16パスが通っている場合や、カレントディレクトリで実行した場合は
絶対パスが出るみたいですが、下のようにディレクトリを指定して実行した場合は
ディレクトリ名しか出ません。つまり、
shtest/shtest.sh
を実行したときは shtest だけが得られる。得られたパスの初めの文字を判定して
/(スラッシュ)でなければ `pwd`/ を付け加えるというようにすればいいと
思うのですが、どうすれば出来るのですか?たびたびすみません。
0695名無しさん@お腹いっぱい。
2005/07/21(木) 23:28:21$0 いじって呼ばれたらだめだな。
0696名無しさん@お腹いっぱい。
2005/07/21(木) 23:57:18#!/bin/bash
if [ "${0#/}" != "$0" ]; then
path="$0"
elif [ "${0#./}" != "$0" ]; then
path=`pwd`"${0#.}"
elif [ "${0#../}" != "$0" ]; then
path=`dirname "$(pwd)"`"${0#..}"
else
path=`pwd`/"$0"
fi
echo $path
0697名無しさん@お腹いっぱい。
2005/07/22(金) 00:36:21APATH=`cd $DIR; pwd`/`basename $0`
echo $APATH
とか。
0698名無しさん@お腹いっぱい。
2005/07/22(金) 00:40:210699名無しさん@お腹いっぱい。
2005/07/22(金) 00:48:200700名無しさん@お腹いっぱい。
2005/07/22(金) 00:52:120701名無しさん@お腹いっぱい。
2005/07/22(金) 02:02:40shellの中で、
realpath $0
か、
readlink -f $0
が、スマートなんじゃないだろうか?
0702名無しさん@お腹いっぱい。
2005/07/22(金) 03:25:520703691
2005/07/22(金) 08:39:450704名無しさん@お腹いっぱい。
2005/07/22(金) 08:50:190705名無しさん@お腹いっぱい。
2005/07/22(金) 15:33:00a2pコマンドが吐き出すシェルスクリプトについてですが、
2行目、
eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
のように、"$@"をわざわざ ${1+"$@"}と書く周到ぶりですが、
その反面、$0 を、"$0"じゃなく裸のまま $0 と書いちゃってます。
今はディレクトリ名にスペースを含むこともあったりするし、
ちゃんと "$0" と記述したものを出力するべきじゃないでしょうか。
逆に、$0で桶なら、${1+"$@"}だけ拘っているのが、
クォリティ的にちぐはぐに思います。
識者の意見求む。
0706名無しさん@お腹いっぱい。
2005/07/22(金) 21:31:010707名無しさん@お腹いっぱい。
2005/07/22(金) 21:36:070708名無しさん@お腹いっぱい。
2005/07/22(金) 21:44:560709名無しさん@お腹いっぱい。
2005/07/22(金) 22:21:07"/usr/local/Program Files" の下にシェルスクリプトがあったり
するんじゃないの?
0710名無しさん@お腹いっぱい。
2005/07/22(金) 22:41:000711名無しさん@お腹いっぱい。
2005/07/22(金) 22:42:03http://www.wwwwwwwwww.net/1/soko/VIP00991.JPG
0712名無しさん@お腹いっぱい。
2005/07/22(金) 22:44:460713名無しさん@お腹いっぱい。
2005/07/22(金) 22:50:120714名無しさん@お腹いっぱい。
2005/07/22(金) 22:53:05a2pのバグと思われ。(s2pもそうかな)
所詮perlのおまけソフトなので、
それがperlクオリティー。
0715名無しさん@お腹いっぱい。
2005/07/23(土) 02:08:250716名無しさん@お腹いっぱい。
2005/07/23(土) 07:42:240717sasasa
2005/07/23(土) 12:17:120718名無しさん@お腹いっぱい。
2005/07/23(土) 12:18:390719名無しさん@お腹いっぱい。
2005/07/23(土) 12:30:13その、新しいスクリプトのlsが存在するディレクトリに
先にPATHを通す。
PATH=/home/hoge/bin:$PATH; export PATH
とか。
(csh系は糞なので敢えて説明はしないがrehash等が必要)
>>718 はアフォなので無視。
# commandコマンドの動作を勘違いしてるようだし、
# command自体、Bourneシェルでは使えない
あ、「正しいls」というのが、「元の標準のls」という意味なら、
/bin/ls と、フルパスで実行する。
0720名無しさん@お腹いっぱい。
2005/07/23(土) 12:36:58(゚Д゚)ハァ?
0721名無しさん@お腹いっぱい。
2005/07/23(土) 12:38:58(゚Д゚)ハァ?
0722名無しさん@お腹いっぱい。
2005/07/23(土) 12:59:06lsがシェル関数だとcommand lsで回避できますが、
スクリプトだとだめでした。
>>719
ありがとうございます。
やっぱり絶対PATHしかないんですね。
0723sasasa
2005/07/23(土) 13:16:11"
'
`
の意味って何を意味しているんですか?
0724名無しさん@お腹いっぱい。
2005/07/23(土) 13:20:29'"` はクォートという。
質問が基本的過ぎるので、
man shして、クォートの欄を読むか、
シェルスクリプトの参考書のクォートの欄を読め。
ここでの質問はもっと具体的なものでよろしこ。
0725名無しさん@お腹いっぱい。
2005/07/23(土) 13:30:51たとえば、
rm -rf /
は危険なコマンドとして有名だが、
' 'を使って、 'rm -rf /' とすると、
スペースを含めて「rm -rf /」という名前のコマンドとみなされるので、
実行しても、
# 'rm -rf /'
rm -rf /: No such file or directory
と、エラーになるので全く安全。
では練習問題。' 'を ` ` に変えて
# `rm -rf /`
をやってみよう。
0726名無しさん@お腹いっぱい。
2005/07/23(土) 13:37:28これはひどい練習問題だ。
0727名無しさん@お腹いっぱい。
2005/07/23(土) 13:39:380728名無しさん@お腹いっぱい。
2005/07/23(土) 14:03:50全く安全というか、意味ねーし
0729名無しさん@お腹いっぱい。
2005/07/23(土) 14:04:34(゜Д゜)ハァ?
0730名無しさん@お腹いっぱい。
2005/07/23(土) 14:37:16お前、意地悪だな
0731名無しさん@お腹いっぱい。
2005/07/23(土) 14:47:26課題の内容をここで聞いてるのか・・・・。
ちなみにきっと俺とお前は同じ大学だろう。
0732名無しさん@お腹いっぱい。
2005/07/23(土) 14:54:24http://pc8.2ch.net/test/read.cgi/unix/1119703835/573
0733名無しさん@お腹いっぱい。
2005/07/23(土) 15:43:56ぷげら
0734名無しさん@お腹いっぱい。
2005/07/25(月) 00:07:31特定のディレクトリを次々にバックアップするために、
コピー元 => コピー先
のペアをリスト化してループ処理させたいのですが、
どのように記述すればよいのでしょうか。
0735名無しさん@お腹いっぱい。
2005/07/25(月) 00:09:40find でがんばる、とか?
0736名無しさん@お腹いっぱい。
2005/07/25(月) 00:16:59なんだいな?backuplistファイルの内容が
source1 dest1
source2 dest2
...
とかなってたら、
cat backuplist | while read source dest
do
cp $source $dest
done
とかでいいじゃん。cpの代わりにtarなりcpioなり、cp -aなり、好きにして。
0737名無しさん@お腹いっぱい。
2005/07/25(月) 00:17:07えーと、
list={
. { /hoge/hoge1 => /fugo/fugoA }
. { /hoge/hoge2 => /fugo/fugoB }
. { /hoge/hoge3 => /fugo/fugoC }
}
foreach ( pair in list )
. コピー等の処理 pair[0] , pair[1]
みたいなことをしたいんです。
0738名無しさん@お腹いっぱい。
2005/07/25(月) 00:18:04まさにそれです^^
ありがとうございました。
0739名無しさん@お腹いっぱい。
2005/07/25(月) 00:50:550740名無しさん@お腹いっぱい。
2005/07/25(月) 01:00:25man paste
0741名無しさん@お腹いっぱい。
2005/07/25(月) 10:19:39そんな餌に釣られるクマー!
linuxが起動しなくなったんですけど(><)
0742名無しさん@お腹いっぱい。
2005/07/25(月) 21:08:56エラーが出るよ。
0743名無しさん@お腹いっぱい。
2005/07/26(火) 01:00:43mvコマンドで、一度に移動できるファイル数には上限があるのでしょうか?
最大で99999個のファイルを移動できるのか調査しているのですが・・・・
catコマンドが一度に1000件づつしか処理できないようなのですが。
ご存知の方がおりましたらどうぞよろしくお願いします。
0744名無しさん@お腹いっぱい。
2005/07/26(火) 01:22:270745名無しさん@お腹いっぱい。
2005/07/26(火) 01:41:35そんな調査するより xargs を使うべきじゃないの。
0746743
2005/07/26(火) 02:21:40>>743 xargsですか。ちょっと知らないコマンドですが、調べてみますね。レス感謝です。
0747名無しさん@お腹いっぱい。
2005/07/26(火) 02:21:47find /usr/include -name '*.h'|xargs grep ARG_MAX
0748名無しさん@お腹いっぱい。
2005/07/26(火) 02:40:210749名無しさん@お腹いっぱい。
2005/07/26(火) 02:46:40こういったことの周りの知識を知らないのも問題だが、
知識不足なのにいたずらに限界に挑戦しようとする方も問題。
知識不足なら知識不足なりに秘孔をついてしまわぬよう安全策をとるのが一つの見識。
0750名無しさん@お腹いっぱい。
2005/07/26(火) 07:55:30確かに xargs -n で引数を分割して実行できるが、
xargsはスペースや改行等を含んだファイル名を
正しく扱えないという、仕様上のバグがあるので、
xargs自体obsolete or deprecated。
xargs -0 (xargs --null)が使えるのはGNU xargsだけなので、
一般には使えないと考えるべき。
0751名無しさん@お腹いっぱい。
2005/07/26(火) 09:42:40でなきゃ GNU の入れりゃいいじゃん。
0752名無しさん@お腹いっぱい。
2005/07/26(火) 09:44:18だけではない。
0753名無しさん@お腹いっぱい。
2005/07/26(火) 09:47:48何が?
0754名無しさん@お腹いっぱい。
2005/07/26(火) 09:59:110755名無しさん@お腹いっぱい。
2005/07/26(火) 11:01:49「ファイル名に問題ないことが確実」な状況って、
自分の作業用ディレクトリ下で、
書き捨てスクリプトを書く場合くらいしかないぞ。
ユーザー開放のディレクトリ以下を一括処理したい場合、
どういうファイルネームが存在するかの仮定をしちゃいけないし、
GNU物を勝手に入れるのも禁止だから、
結局xargsなんて使えん、のが結論。
0756名無しさん@お腹いっぱい。
2005/07/26(火) 11:03:45勝手に入れちゃだめならしかるべき手続きを踏めばいいじゃない。
0757名無しさん@お腹いっぱい。
2005/07/26(火) 11:11:250758名無しさん@お腹いっぱい。
2005/07/26(火) 12:30:03特にSambaサーバにしてるならそういうファイル名は全然珍しくないわな
0759名無しさん@お腹いっぱい。
2005/07/26(火) 16:14:400760名無しさん@お腹いっぱい。
2005/07/26(火) 16:24:470761名無しさん@お腹いっぱい。
2005/07/26(火) 17:55:03Solaris 9 だと空白は大丈夫だし、改行も \ でエスケープすれば問題なしですが。
$ /bin/echo 'a b\nc\\\nd' | xargs -L 1 -I '{}' /bin/echo "'{}'"
{a b}
{c
d}
0762名無しさん@お腹いっぱい。
2005/07/26(火) 17:56:12いまどきSolaris使っている馬鹿ってpupupu−−−
0763名無しさん@お腹いっぱい。
2005/07/26(火) 18:23:08「Soralis」と書けばよかったのに
0764名無しさん@お腹いっぱい。
2005/07/28(木) 08:09:48xargsの-L 1オプション使ったら、
1行ごとにコマンド(echo)が実行されてしまうから、
元質問の、「まとめて処理」ができないだろ。
それに、「改行を \ でエスケープ」と言っても、
そう都合良く findで出力できないだろ。
さらに、ファイル名に普通の文字として、
" や ' や \ などが含まれていると
やっぱり駄目だろ。
よって、xargsは使えん。
0765名無しさん@お腹いっぱい。
2005/07/28(木) 08:23:23基本的にそれは考慮せんでもいいと思うんだが
0766名無しさん@お腹いっぱい。
2005/07/28(木) 09:24:00だとしたら xargs -0 も完全な解決策にはならないが。
0767名無しさん@お腹いっぱい。
2005/07/28(木) 10:05:15ファイル名にnull文字は使えねーよ。
だからxargs -0が最もマトモな解決法なのだが、
Solarisとかで使えないから問題になってるんだよ。
0768名無しさん@お腹いっぱい。
2005/07/28(木) 10:10:17改行は滅多にないとしても、
ファイル名に ' " \ などが含まれているのは
よくある。
「Don't Cry.mp3」とかね。
xargsが ' " \ を特殊文字扱いするのが問題になる。
0769名無しさん@お腹いっぱい。
2005/07/28(木) 11:46:07xargsが単純に改行をセパレータとして扱うような
プログラムだったなら、はるかにマシだっただろうね
0770名無しさん@お腹いっぱい。
2005/07/28(木) 14:45:330771名無しさん@お腹いっぱい。
2005/07/28(木) 14:50:42あっ、そんな記憶ある。
NEWS-OS 4 (3かな?) じゃないかな。
0772名無しさん@お腹いっぱい。
2005/07/28(木) 18:31:44/usr/5binにすらない。
(/usr/5bin/cpioとかならある・・ちなみにunameもない・・)
まあ、xargsは元SysV系ということで、
「使わなくても済むはずのコマンド」の扱いだったのだろう。
0773761
2005/07/28(木) 19:56:55761 で -L 1 を付けたのは、この例だと 1 行ずつ処理しないと
表示が分かりづらいからです。説明が悪かったですね。
改行の入ったファイル名は (find 的に) 無理ですが、
何とかすれば何とかなります。
$ touch "sp ace"
$ touch "single'quote"
$ touch 'double"quote'
$ touch 'back\slash'
$ find . -type f | sed -e 's/\\/\\\\/g' -e 's/"/\\"/g' -e 's/\(.*\)/"\1"/' | xargs /bin/sh -c 'echo "[$1][$2][$3][$4]"' --
[./sp ace][./single'quote][./double"quote][./back\slash]
ま、そこまでして使いたいかと言えば No ですが。
0774名無しさん@お腹いっぱい。
2005/07/28(木) 20:27:47たしかにマシンのほとんどはNEWSだった。記憶があやふやだったので
local をつけたけど、やはり/usr/X11/binだったのかな
0775771
2005/07/29(金) 00:50:15記憶違いだったようで、スミマセン。
ひょっとしたら、初心者の私が
「ファイル名が x で始まるのに、どうして/usr/bin/X11にないんだ」
(笑わないでオクレ!)
と思ったのが記憶に残っていたのかもしない。
あっ、 NEWS-OSの X 関係は /usr/bin|lib/X11というのも違うかも。
近くの席にはSUN 3 が有ったなぁ。
0776名無しさん@お腹いっぱい。
2005/07/29(金) 03:39:56xargs はあった方が良いと思うんだが。
これの代わりをするには、たくさんコマンド組み合わせてやらないといかん希ガス
0777名無しさん@お腹いっぱい。
2005/07/29(金) 08:14:57あったという記憶は同じようだけど。NEWSのキーボードのタッチは好きだった。
「~」の位置のせいで痛いミスをしたことがあったが…
xargsはコマンドライン以外で使ったことがないかもしれん。
0778名無しさん@お腹いっぱい。
2005/07/29(金) 08:19:04xargsは実行時効率とタイプ量減らすためって気がする
たんに機能の話だけで言えば
cmdA | xargs cmdB
は
cmdA | while read i; do cmdB $i; done
でいいし(後者は効率が悪いがIFSで適切なデリミタを設定することもできる)
0779名無しさん@お腹いっぱい。
2005/07/29(金) 08:28:340780名無しさん@お腹いっぱい。
2005/07/29(金) 10:04:04随分昔の話なので、私の記憶が間違っていたのかと思いました。
>777
コマンドライン以外で使うxargs って、スクリプトの中に書くという事ですよね。
それとも、使いやすいGUIが有るとか? (そんなGUI 想像つかない)
# スレ違いなんで、このくらいにしておきます。 orz
0781名無しさん@お腹いっぱい。
2005/07/29(金) 18:23:59xarg はいらないの?
0782名無しさん@お腹いっぱい。
2005/07/29(金) 18:26:250783名無しさん@お腹いっぱい。
2005/07/29(金) 18:37:570784名無しさん@お腹いっぱい。
2005/07/30(土) 09:24:10xargs -i cmd {} でほぼ解決できる。
パフォーマンスは知らん。
0785名無しさん@お腹いっぱい。
2005/07/30(土) 10:19:58だからぁー、-iオプション付けると
-l 1も暗黙に付いちゃうから、xargs使う意味がなくなるんだよ。
解決するのはスペースを区切り文字とみなさないことだけであって、
\ とか ' とか " の問題はそのまま未解決。
0786名無しさん@お腹いっぱい。
2005/07/30(土) 10:28:10>-l 1も暗黙に付いちゃうから、xargs使う意味がなくなるんだよ。
意味不明。
0787名無しさん@お腹いっぱい。
2005/07/30(土) 11:01:57何を言ってるんだ?w
0788名無しさん@お腹いっぱい。
2005/07/30(土) 14:54:36f1 f2 f3 f4 ->f1.jpg f2.jpg f3.jpg f4.jpg
0789名無しさん@お腹いっぱい。
2005/07/30(土) 15:00:30mv $file $file.jpg
done
0790名無しさん@お腹いっぱい。
2005/07/31(日) 21:14:35rename って言ってるってことはMS-DOSプロンプトなんだろうよ
正解は >>791 よろしく
0791名無しさん@お腹いっぱい。
2005/07/31(日) 21:20:030792名無しさん@お腹いっぱい。
2005/07/31(日) 21:22:190793名無しさん@お腹いっぱい。
2005/07/31(日) 21:37:19ただし一般的ではない。
>>789
はダブルクォート付けていないから、減点だな。
0794名無しさん@お腹いっぱい。
2005/07/31(日) 21:45:25* はまずいだろ
0795名無しさん@お腹いっぱい。
2005/07/31(日) 22:00:170796名無しさん@お腹いっぱい。
2005/08/01(月) 08:28:050797名無しさん@お腹いっぱい。
2005/08/02(火) 12:42:06いいでしょう?
0798名無しさん@お腹いっぱい。
2005/08/02(火) 12:42:330799名無しさん@お腹いっぱい。
2005/08/02(火) 13:38:30tail -r
0800名無しさん@お腹いっぱい。
2005/08/02(火) 23:45:18ひねくれ者め(笑)
0801名無しさん@お腹いっぱい。
2005/08/03(水) 00:25:160802名無しさん@お腹いっぱい。
2005/08/03(水) 00:56:37実際のところ head で実現するのは苦しい気がする。
(head で指定できる行数は限りがあったと思うので。)
てことで
tail -<n> <file_name> > <tmp_file>
comm -23 <file_name> <tmp_file>
rm -f <tmp_file>
かな。
0803名無しさん@お腹いっぱい。
2005/08/03(水) 02:44:090804名無しさん@お腹いっぱい。
2005/08/03(水) 03:14:440805名無しさん@お腹いっぱい。
2005/08/03(水) 03:32:44last=100
rows=`wc -l file | cut -d ' ' -f 1`
head -n `expr $rows - $last` file
とか。
0806名無しさん@お腹いっぱい。
2005/08/03(水) 03:37:55は
wc -l < file
でいいだろ
0807名無しさん@お腹いっぱい。
2005/08/03(水) 07:23:57??
0808名無しさん@お腹いっぱい。
2005/08/03(水) 10:14:37GNU tail では -r はないようなのでかわりに tac を。
0809名無しさん@お腹いっぱい。
2005/08/03(水) 12:55:11あんまり嬉しくないんですよね。
というわけで、こうかなあと。(n=4の場合)
ruby -ne '(q||=[])<<$_;q.size<=4||print(q.shift)' file
0810名無しさん@お腹いっぱい。
2005/08/03(水) 13:07:440811名無しさん@お腹いっぱい。
2005/08/03(水) 17:21:46スクリプトを実行したら
login:
名前を打ち込んで
password:
パスを打ち込む(非表示)
パスはファイルにリダイレクト
っていうのを作りたいんですが。バッシュで。
途中で文字列を入力させるやり方が分かりません。
教えてください。おねがいします。
0812名無しさん@お腹いっぱい。
2005/08/03(水) 17:37:23read -s -p 'password: ' PASS
echo $PASS > file
0813名無しさん@お腹いっぱい。
2005/08/03(水) 20:14:020814名無しさん@お腹いっぱい。
2005/08/04(木) 02:44:04どのようにやればよいでしょうか?
0815名無しさん@お腹いっぱい。
2005/08/04(木) 08:57:48exec perl -pe chomp
0816名無しさん@お腹いっぱい。
2005/08/04(木) 13:31:14知らなかった
0817名無しさん@お腹いっぱい。
2005/08/04(木) 13:39:59上記のようなパイプで繋いだコマンドで、cmd1の終了ステータスを拾いたいのですが、
どうしたらよいのでしょうか?
0818名無しさん@お腹いっぱい。
2005/08/04(木) 14:25:130819名無しさん@お腹いっぱい。
2005/08/04(木) 14:45:120820名無しさん@お腹いっぱい。
2005/08/04(木) 14:55:23echo $?
うーん、美しくない。
0821名無しさん@お腹いっぱい。
2005/08/04(木) 22:10:150822名無しさん@お腹いっぱい。
2005/08/04(木) 23:58:53tr -d '\n'
0823名無しさん@お腹いっぱい。
2005/08/05(金) 00:59:04bash の(たぶん)3.0じゃないと使えないと思うけど、
$ echo $PIPESTATUS[0]
とか、出来る。
ちなみに配列だから、
$ echo ${PIPESTATUS[*]}
で、全部見れる。
あと、ちょっと違うけど、
$ set -o pipefail
とかもある。
0824823
2005/08/05(金) 01:01:30pipefailが、3.0からだった。
0825名無しさん@お腹いっぱい。
2005/08/05(金) 02:17:49どう書けばいいですか?所有者ももそれぞれのユーザに設定できますか?
0826名無しさん@お腹いっぱい。
2005/08/05(金) 02:32:28/etc/skel に置いとけ
0827名無しさん@お腹いっぱい。
2005/08/05(金) 02:35:580828名無しさん@お腹いっぱい。
2005/08/05(金) 02:54:40そんなぁ・・・
そこをなんとか・・・
0829名無しさん@お腹いっぱい。
2005/08/05(金) 03:15:53だだこねる相手はママだけにしとけよ。
次の方、どうぞ↓
0830名無しさん@お腹いっぱい。
2005/08/05(金) 07:43:520831名無しさん@お腹いっぱい。
2005/08/05(金) 07:47:09シス管が居て、迷惑してるのですが、
これを拒否するにはどうしたらいいでしょうか?
ちなみに、root権限で上書きコピーしてくるため、
一般ユーザーのパーミッション設定では防げません。
あと、.emacsだけじゃなく、$HOME/.profile
$HOME/.xinitrcとかもコピーで潰されるので大迷惑です。
0832名無しさん@お腹いっぱい。
2005/08/05(金) 08:17:230833名無しさん@お腹いっぱい。
2005/08/05(金) 08:34:38#!/bin/sh
cat <<EOF | mail root
From: $USER
あなたのホスト管理はクソです。
いますぐ.emacsをroot権限で上書きするというアホな行為をやめてください。
EOF
0834名無しさん@お腹いっぱい。
2005/08/05(金) 08:53:27自分の.emacs を、.my-emacs とかにかえて、
シェルのalias を使って、
alias emacs="emacs -q -l .my-emacs"
とかしとく。
.profile の方も、同じような考え方で、
bash --norc --noprofile の後、自分のprofileを読み込むようなscriptを書いといて、
毎回、loginし直す。(面倒だけど)
zsh 、ksh、tcsh等、対話的に使うshellを他のにするとかでもいいんじゃん?
.xinitrcは、
export XINITRC=$HOME/.my-xinitrc
を設定しといて、startx。
で、どうよ。
>>833 みたく、管理者に一言いうのが早いかもしんないけど。
0835名無しさん@お腹いっぱい。
2005/08/05(金) 11:18:520836名無しさん@お腹いっぱい。
2005/08/05(金) 11:36:49ログインシェルは何か。自分の権限でcronやchshは使えるか。
などによっていろいろと対抗手段は考えられるけど、情報不足。
0837名無しさん@お腹いっぱい。
2005/08/05(金) 11:41:59こんなに釣りにつき合ってくれてありがとう。
0838名無しさん@お腹いっぱい。
2005/08/05(金) 11:48:340839名無しさん@お腹いっぱい。
2005/08/05(金) 13:03:52∧_(Д`; )
( ・∀・)玉 つ
(っ ≡つて ヽ チーン!
して_)_ノw (_)
玉を砕くと書いて「玉砕」と言う。
0840名無しさん@お腹いっぱい。
2005/08/05(金) 13:12:340841名無しさん@お腹いっぱい。
2005/08/05(金) 13:32:33ふつー、rm -f してから cpするだろうから効果なし。
0842名無しさん@お腹いっぱい。
2005/08/05(金) 16:40:350843名無しさん@お腹いっぱい。
2005/08/05(金) 17:32:09の3の書き込みなんですが、意味は分かるんですが
なぜ {, という書き方なんでしょうか。
そのままぐぐってみてもヒットしないので
展開の書式を解説しているサイトを教えてください。
0844名無しさん@お腹いっぱい。
2005/08/05(金) 17:35:5513.6 Brace Expansion
====================
A string of the form `FOO{XX,YY,ZZ}BAR' is expanded to the individual
words `FOOXXBAR', `FOOYYBAR' and `FOOZZBAR'. Left-to-right order is
preserved. This construct may be nested. Commas may be quoted in
order to include them literally in a word.
0845名無しさん@お腹いっぱい。
2005/08/05(金) 17:42:34>>843 は、空文字列のカンマに付いての質問と思われ。
ブレース展開自体の質問じゃないよ。
0846名無しさん@お腹いっぱい。
2005/08/05(金) 17:42:54(゚Д゚)ハァ?
0847名無しさん@お腹いっぱい。
2005/08/05(金) 17:43:46自分の理解力不足を棚にあげて、人を批判とはおめでたい人ですね. :-)
0848名無しさん@お腹いっぱい。
2005/08/05(金) 17:44:25> ブレース展開自体の質問じゃないよ。
>>843
> 展開の書式を解説しているサイトを教えてください。
0849名無しさん@お腹いっぱい。
2005/08/05(金) 17:44:57英語が読めないなら、エキサイト翻訳使えよ。
0850名無しさん@お腹いっぱい。
2005/08/05(金) 17:52:13ネスティング可能なことと、
カンマ自体を普通の文字として使うならクォートしろということだけ。
元質問のコマンドラインでは左から右への順序は関係ないし、
空文字列のカンマも許されることは >>844 には書かれていない。
なので、 >>844 は早とちりの外し回答だと思う。
0851名無しさん@お腹いっぱい。
2005/08/05(金) 18:09:45百年謝罪しろ!!!!!!!!!!!!!!!!!!!!!!!!!!
0852名無しさん@お腹いっぱい。
2005/08/05(金) 20:29:30> 空文字列のカンマも許されることは >>844 には書かれていない。
禁止されていないということは許されているということだろ。
0853名無しさん@お腹いっぱい。
2005/08/05(金) 20:38:18元質問は「 {, とは何か?」と聞いているのだから、
「それはブレース展開の最初の文字列が空文字列になっているものだ」
と答えるのが的確。
>>850 はマトはずれ。
0855名無しさん@お腹いっぱい。
2005/08/05(金) 21:11:43今/home/.vimrcがあるとして、ユーザディレクトリにそれぞれコピーするには
どう書けばいいですか?所有者ももそれぞれのユーザに設定できますか?
0856名無しさん@お腹いっぱい。
2005/08/05(金) 21:12:300857名無しさん@お腹いっぱい。
2005/08/05(金) 21:19:51シス管が居て、迷惑してるのですが、
これを拒否するにはどうしたらいいでしょうか?
ちなみに、root権限で上書きコピーしてくるため、
一般ユーザーのパーミッション設定では防げません。
あと、.vimrcだけじゃなく、$HOME/.xsessionや
$HOME/.cannaとかもコピーで潰されるので大迷惑です。
0858名無しさん@お腹いっぱい。
2005/08/05(金) 21:24:000859名無しさん@お腹いっぱい。
2005/08/05(金) 21:26:37コミュニケーション能力を磨くといいよ。
0860名無しさん@お腹いっぱい。
2005/08/05(金) 21:34:21コミュニケーション能力じゃなくて、
技術的に回避する方法はありませんか?
上司に言っても、
「シス管は彼に任せているから、彼の方針に従ってくれ」
の一点張りで話が進みません。
0861名無しさん@お腹いっぱい。
2005/08/05(金) 21:39:23> >>859
> 技術的に回避する方法はありませんか?
あるけど、
> 「シス管は彼に任せているから、彼の方針に従ってくれ」
その彼とコミニュケーションはとったの?
0862名無しさん@お腹いっぱい。
2005/08/05(金) 21:45:480863名無しさん@お腹いっぱい。
2005/08/05(金) 21:46:34だれも君がどう感じたかなんて聞いていないよ。
0864名無しさん@お腹いっぱい。
2005/08/05(金) 21:52:54もちろん、とったよ。
「これはシステム管理上必要なことだから」
で話は進まず。
0865名無しさん@お腹いっぱい。
2005/08/05(金) 21:56:36>>861
$HOME/.xsession の場合は回避するの難しくないか?
0866名無しさん@お腹いっぱい。
2005/08/05(金) 22:04:22,. '´ _ -−ニ二二`ヽ、
/ / _,.−'⌒ヽ,ノ``'ミ,、
,.' / / ,,イ゙\ /入、ヾ,
. / / // -‐''"_ ヽ l l′/`_''l}
' / ,.イii/ /∠´ `ヾ' l lレ''´ ヾ
/ ,.' ii/u i{,_,, ゚ }! l li{,_,. ゚ }
. / /ii i/u uヾく,_,ノ′ l lゞi-rイ
,' /-、 i| u ' ' ` ,__〉〉 |
. /l 「ヾ'i| ,.r‐ `'U'U_,ィ}|
/ | ー}.l| /,r 'T"丁 ̄| ̄ | l|'|
}i iト、}( l! ,イ |__, ⊥ _|__,l|.ト、
`i iiiハ `| i l_/ _,ノノ|| \
. }iij. |. l |Y/ ‐┴''" ||\ \
゙l! | l|. 仁 _,__ || \ \
/ | |l lニレ'´ `ヾ'、 || \ \
/ |. |ヽ 「]、 ヾ>、|| \
/ .| |. ヽ`「ヽ }H|\
| | ヽ`「ヽ、、,__,,ノj‐|| ` ー─
u | | \`'〔`'T''''''T´ ,ノ|
| | \ ` ̄ ̄ ̄ /
| | `−──‐′
0867名無しさん@お腹いっぱい。
2005/08/05(金) 22:05:00.xsession って #! みてくれたっけ?
0868名無しさん@お腹いっぱい。
2005/08/05(金) 22:35:33見るかどうかは、/usr/X11R6/lib/X11/xdm/Xsession に
どう書いてあるかによって変わる。デフォルト状態の
Xsessionでも、Xのバージョンによって違ったと思う。
というか、root管理者が /usr/X11R6/lib/X11/xdm/Xsession
を編集して、そもそも$HOME/.xsessionを参照しないようにされてしまうと
一巻の終り。それに気づかない程度のアホ管理者と想像するが・・
0869843
2005/08/06(土) 00:40:56空文字列という意味なんですね
ありがとうございました
0870名無しさん@お腹いっぱい。
2005/08/06(土) 13:29:380871
2005/08/07(日) 12:53:34そのホストとは別に、LinuxなりBSDなりマシン立ち上げて、
そっちの環境で作業すれば〜
0872名無しさん@お腹いっぱい。
2005/08/07(日) 13:12:15これでなんで最後のSUMがゼロになってしまうんでしょうか?
0873名無しさん@お腹いっぱい。
2005/08/07(日) 13:17:40やりたいこと自体はこれでOKでした。
0874名無しさん@お腹いっぱい。
2005/08/07(日) 13:18:26パイプでwhileにつないだ場合、
この部分はさらに別シェルで実行されるから
その次のセミコロン以降の変数には反映されない。
0875名無しさん@お腹いっぱい。
2005/08/07(日) 13:22:17>>454
0876名無しさん@お腹いっぱい。
2005/08/07(日) 13:39:50どうするのがいいんでしょうか??
0877名無しさん@お腹いっぱい。
2005/08/07(日) 13:48:27>>455
0878名無しさん@お腹いっぱい。
2005/08/07(日) 13:53:01ありがとうございます。これでなんで上手くいくのか分りませんがとにかくそういうもんだと思っておきます。
0879名無しさん@お腹いっぱい。
2005/08/07(日) 16:11:32シェルによって違う。
bourneとbashはパイプからだとサブシェルになる。
kornとzshはパイプからでもサブシェルにならない。
0880名無しさん@お腹いっぱい。
2005/08/08(月) 23:29:21読み込む処理がうまく行きません。
外側のループが処理されずに抜けてしまいます。
(個人的な推測では内側のループで外側のカーソルも移動している気がします)
どなたか、対処の方法を教えてくだされ。
ソースはこんな感じです。
function funcA
{
while read LINEB
do
処理あれこれ
done <$LINEB
}
while read LINE
do
funcA
done <$FILEA
0881名無しさん@お腹いっぱい。
2005/08/08(月) 23:35:21ヒント:リダイレクト、ファイル記述子
0882名無しさん@お腹いっぱい。
2005/08/08(月) 23:38:460883880
2005/08/08(月) 23:42:58もうちょっと、ヒントをください。
>>882さん
先ほどのソースは間違ってますが、現実は「FILEB」です。
ご指摘ありがとうございます。
0884名無しさん@お腹いっぱい。
2005/08/09(火) 00:04:592 FILEB=$0
3 CNT=0
4 function funcA
5 {
6 while read LINEB
7 do
8 echo $LINEB
9 done <$1
10 }
11 while read LINE
12 do
13 echo ------$CNT------
14 funcA $FILEB
15 CNT=`expr $CNT + 1`
16 done <$0
この例だと、同じファイルを読み込んでるけど、ちゃんと動くがなぁ。
0885880
2005/08/09(火) 00:34:04ほ、本当ですか?
自宅にはUNIX環境がないため、確かめることはできないのですが…
なんでだろうか。。
0886名無しさん@お腹いっぱい。
2005/08/09(火) 06:20:17どうすればいいでしょうか?
0887名無しさん@お腹いっぱい。
2005/08/09(火) 06:35:34echo $$ > pid
念のため言っておくけど、複数個起動すれば当然"pid"というファイルの
内容は書き直されちゃうからね。
0888名無しさん@お腹いっぱい。
2005/08/09(火) 07:14:42あざーっす!
参考になります。
ところで、やはりスクリプト内で別のスクリプトを読んでいる場合は
実プロセスIDではなくてスクリプトを実行しているプロセスのIDになってしまいますよね・・
0889名無しさん@お腹いっぱい。
2005/08/09(火) 07:19:22スクリプトを実行してるプロセスのIDになりました。
apacheとかはどうやって取得しているんでしょうか・・・
0890名無しさん@お腹いっぱい。
2005/08/09(火) 07:23:100891名無しさん@お腹いっぱい。
2005/08/09(火) 07:55:48あざーーっす!!!!
取れました!
1 #!/bin/sh
2
3 echo $$
4 ./test.sh &
5 echo $!
という超簡単なものなら行けたんですが・・・・・
実はtomcatの自動起動スクリプトを書いているんですが、
ソース晒して見てもらってもいいでしょうか?
0892名無しさん@お腹いっぱい。
2005/08/09(火) 16:03:39ってなんだよ?
0893名無しさん@お腹いっぱい。
2005/08/09(火) 16:13:010894名無しさん@お腹いっぱい。
2005/08/09(火) 16:14:21http://d.hatena.ne.jp/keyword/%A4%A2%A4%B6%A1%BC%A4%B9
0895名無しさん@お腹いっぱい。
2005/08/09(火) 16:15:07当たってたら、なんかくれ。
0896名無しさん@お腹いっぱい。
2005/08/09(火) 16:59:30日本語を書くこと。
0897名無しさん@お腹いっぱい。
2005/08/09(火) 17:40:180898名無しさん@お腹いっぱい。
2005/08/09(火) 21:41:090899名無しさん@お腹いっぱい。
2005/08/09(火) 21:43:310900名無しさん@お腹いっぱい。
2005/08/10(水) 09:20:00こういうのあんまりよくない?
0901名無しさん@お腹いっぱい。
2005/08/10(水) 10:18:290902名無しさん@お腹いっぱい。
2005/08/10(水) 10:37:29自己レスです。
結局
echo $(ps -ewo "%p %c %u %a" | awk "\$2==\"java\" && /catalina/ && \$3==\"$CATALINA_USER\" {print \$1}" | head -n 1) > $CATALINA_PID
こんな強引なやり方でプロセスID取得しました
0903名無しさん@お腹いっぱい。
2005/08/10(水) 12:56:490904名無しさん@お腹いっぱい。
2005/08/10(水) 14:54:230905名無しさん@お腹いっぱい。
2005/08/10(水) 19:16:47Tomcatが8080で待ちうけている場合
/usr/sbin/lsof -t -i TCP:8080 -P
シェルスクリプトじゃないけどね。
0906名無しさん@お腹いっぱい。
2005/08/10(水) 19:48:48ええー、(環境によっては)lsofをわざわざインスコすんの…。
そりゃあ必要なものは何でもインスコしなきゃならんがの。プロセスidさえ
わかればよいという目的下だと、ちょっとバランスの悪さを感じる。(俺は)
0907名無しさん@お腹いっぱい。
2005/08/10(水) 23:15:45Kシェルで
count=`cat a.txt b.txt | grep ${検索条件} | wc -l`
というコマンドで検索条件に半角スペースを含む文字列を指定したい場合、どうしたら良いですか?
0908名無しさん@お腹いっぱい。
2005/08/10(水) 23:23:53これじゃあかんの?
0909907
2005/08/10(水) 23:39:59それだと、なぜかcount=0になっちゃうんですよ。
もちろん、条件には引っ掛かる文字列もあります。
うーん。
0910名無しさん@お腹いっぱい。
2005/08/11(木) 01:43:37ksh使ってないんで本題はわからんが、grep -c って標準的じゃないの?
スペースの話を別にすれば
count=`grep -c $検索条件 a.txt b.txt`
でよかったんじゃないのかな。
本題も、wc -lを取り払って試せば、なぜなんだかわからないかな。
0911名無しさん@お腹いっぱい。
2005/08/11(木) 02:03:080912名無しさん@お腹いっぱい。
2005/08/11(木) 11:13:46というところからして、検索文字列の正規表現が
おかしくてマッチしないだけというオチじゃなかろうか。
grep を fgrep に変えてみるとか。
0913907
2005/08/11(木) 20:04:46検索条件はファイルから読み込んでいるので、
半角スペースに見えているのは特殊文字かと思い、
cat -vしてみたら
行末に^Mの文字が‥
引っ掛からないわけでした。
やさしいunix板の皆様、ありがとうございました。
逝ってきます。
0914名無しさん@お腹いっぱい。
2005/08/14(日) 08:45:190915名無しさん@お腹いっぱい。
2005/08/14(日) 10:05:520916名無しさん@お腹いっぱい。
2005/08/14(日) 11:04:42NetBSDにstaticな/bin/bashを突っ込む俺も阿呆だと思うけど。
だってシングルユーザモードでもログインシェルにbashを使いたいんだよもん!
0917名無しさん@お腹いっぱい。
2005/08/14(日) 17:35:450918名無しさん@お腹いっぱい。
2005/08/14(日) 18:04:12私はbashかksh。
0919名無しさん@お腹いっぱい。
2005/08/14(日) 18:51:360920名無しさん@お腹いっぱい。
2005/08/14(日) 19:41:530921名無しさん@お腹いっぱい。
2005/08/14(日) 22:12:160922名無しさん@お腹いっぱい。
2005/08/14(日) 23:23:49明らかにスレ違いだし。
0923名無しさん@お腹いっぱい。
2005/08/22(月) 17:31:43????.sh: xrealloc: cannot reallocate 268435456 bytes (0 bytes allocated)
(????はファイル名)
というエラーがでます。
前同じスクリプトを動かしても何も普通に動いていたのに。。。
パーミッション、ファイルサイズ制限、ログインシェル、メモリ残量
はチェック済みです。。。
このエラーが起きる原因はなんでしょうか?
よろしくお願いします。
0924923
2005/08/22(月) 18:14:300925名無しさん@お腹いっぱい。
2005/08/22(月) 18:26:41原因はなんだったんだよ!
0926名無しさん@お腹いっぱい。
2005/08/23(火) 20:43:34bourne shを使っています。
サーバにある毎日更新されているログファイル(ファイル名に日付入り)にアクセスし、
その中で使用されている2種類の文字列をカウントして、数をエクセルで日ごとに表示させようと思っています。
今考えているやり方は、引数に日付を与えてそれを元にその日のログファイルを検索し、
その中からヒット数をカウントしてテキストかCSV形式で保存し、手作業でエクセルに流し込もうと思っています。
(grep "A" logfile | wc -l ; grep "B" logfile | wc -l) >> hoge.txt
このやり方だとテキスト・CSVどちらの形式でも、
1
2
と改行が入ってしまって、エクセルで
A B
0822 3 5
0823 1 2
0824
という横並びの形で表すことができません。
何か良い方法を教えていただけますでしょうか。
よろしくお願いします。
0927名無しさん@お腹いっぱい。
2005/08/23(火) 20:47:49とりあえず、その部分の改行を取るだけなら、
echo `grep "A" logfile | wc -l ; grep "B" logfile | wc -l` >> hoge.txt
にすればいいわな。
0928926
2005/08/23(火) 21:26:20あぁ、なるほど・・・
近いところまで行ってたのに、そこに辿り着けませんでした・・・
ありがとうございます!
これでひとまずはできそうです。
あとは手作業でやる手間を省けるように、表形式(もしくはそれに近い形)で
表示させれるように考えてみます。
もし何かご存知の方がいらっしゃいましたら、ご教授ください。
0929名無しさん@お腹いっぱい。
2005/08/23(火) 21:44:10if文で文字列比較する際、
頭の2文字が"/a"に一致する、とか最後の文字列が".jpg"に一致する
と言う条件分は、どうすればいいんでしょうか?
正規表現使わないと出来ないのでしょうか?
0930名無しさん@お腹いっぱい。
2005/08/23(火) 21:49:54bashじゃなくても同じ。
if じゃなくて case 使え。
case $mojiretsu in
/a*)
hoge;;
*.jpg)
hoge;;
esac
だな。case文のパターンは正規表現ではなく、
単なるワイルドカードなので、混同しないように。
0931929
2005/08/23(火) 21:51:50早々のレス、ありがとうございます。
わかりますた。
0932名無しさん@お腹いっぱい。
2005/08/23(火) 22:19:21まず、そのやり方では文字列を数えていないことに注意してください。
grep| wc -l では、文字列を含む行を数えているのであって、
たとえば1行の中に目的の文字列が複数含まれていても、
1行としか数えられません。それで本当にいいんですか?
0933名無しさん@お腹いっぱい。
2005/08/23(火) 22:33:36Webサーバのログならanalog使え。
と、勝手な仮定で適当なことを言ってみるテスト。
0934926
2005/08/23(火) 23:47:47確かにおっしゃる通りです・・・
現状では特徴のある文字列でgrepすることで1行ずつで抽出しようと
考えています。
何かこのまま行くとこちらを基準にした名前付けをすることになったりしそうなので、
違う方法を考えてみます。
>>933さん
analogは初めて知りました。
こんなことができるんですね・・・
今回はちょっと学校の環境なので自由には入れられないんですが、
ゆくゆくは自サーバでと考えていたのでその時に参考にさせていただきます。
お二人ともありがとうございます。
0935名無しさん@お腹いっぱい。
2005/08/24(水) 04:45:28正規表現っていってもいいんですか?
0936名無しさん@お腹いっぱい。
2005/08/24(水) 06:27:37ちがう
0937名無しさん@お腹いっぱい。
2005/08/24(水) 06:57:51概念としては正規表現の一種といっていいんですかね?
0938名無しさん@お腹いっぱい。
2005/08/24(水) 07:28:08機能だけ見れば正規表現のごく一部の機能のみをもつ
サブセットだと考えても実用上ほとんど問題はないが、
それでも正規表現の一種だと言ってしまうのは間違い。
0939名無しさん@お腹いっぱい。
2005/08/24(水) 07:36:10何度も聞き返すのしつこいぞ。
シェルのワイルドカードは、正規表現とは全く違う。
サブセット(部分集合)でもないし、正規表現の一種でもない。
例えば、a*.jpg というのがあったとする。
これがシェルのワイルドカードなら、
ahoge.jpg aHage.jpg asoko.jpg ....
などにマッチする。
一方、 a*.jpg が正規表現だとすると、上記のものにはマッチせず、
aaaaaa.jpg aaaaBjpg sjpg .... などといった文字列にマッチする。
全く違うものだよ。
0940937
2005/08/24(水) 07:42:09実装がまったく違うのはわかってますが、
学問的な意味での正規表現ではワイルドカードパターンも
正規表現というのかなあと >>935 と同じ疑問を持ったわけです。
有限オートマトンがなんとかとかいうやつ。
0941名無しさん@お腹いっぱい。
2005/08/24(水) 08:11:42実装が違うだけじゃなくて、仕様自体が違うの。
だから、「学問的な意味」でも、
ワイルドカードパターンのことを正規表現とは言わない。
もともと、メタキャラクターの表現方法がいろいろあったのを、
sedやgrepで使うために「標準化」して、
"regular expression"と定義したわけ。
で、「正規表現」というのは実は誤訳で、
本来なら「標準表現」と言うべきもの。
(シェルで使っているのは標準以外の表現方法)
sedやgrepで使う表現がシェルのものとは異なるため、
sedやgrepが、「こっちが標準ですよ」と言っているかのごとく、
「標準表現=正規表現」というわけ。
もし、文献などでシェルの * のことを「正規表現」と
書いてあるものがあったら、それは大間違いなので買ってはいけない。
0942名無しさん@お腹いっぱい。
2005/08/24(水) 08:16:38> もともと、メタキャラクターの表現方法がいろいろあったのを、
> sedやgrepで使うために「標準化」して、
> "regular expression"と定義したわけ。
それは違うと思うぞ. Unix の正規表現と使ってるメタキャラが違
う正規表現の実装だってあるわけだし...
0943名無しさん@お腹いっぱい。
2005/08/24(水) 08:31:26ま、受理できる言語の集合がサブセットだってこった
0944名無しさん@お腹いっぱい。
2005/08/24(水) 08:50:52> ま、受理できる言語の集合がサブセットだってこった
>>941 のような恥ずかしい奴に言っても意味不明だと思う
0945名無しさん@お腹いっぱい。
2005/08/24(水) 09:33:09自己定義用語を持ち出しているのが間違い。
シェルスクリプトスレで、UNIXの世界で
正規表現と言ったらsedなどで使うものの意味にしかならない。
ただでさえ、初心者がシェルのメタキャラクターを
正規表現だと誤解する例があって混乱を招くので、
>>940 のようなカキコは謹んでくれ。
正規表現については sed スレあたりでやってくれ。
0946名無しさん@お腹いっぱい。
2005/08/24(水) 10:00:00オートマトンとか言語理論の方から見れば,
シェルスクリプトのワイルドカードも立派な
正規表現だと思うが...
0947名無しさん@お腹いっぱい。
2005/08/24(水) 10:04:25本気でそう思い込んでる香具師は
シェルスクリプトを書く素質がないので、
他の板にお帰りください。
0948名無しさん@お腹いっぱい。
2005/08/24(水) 10:10:09「実装が違う」というのは、
具体的なプログラム(コーディング)は違うけど
全体の仕様は同じ場合をいう。
たとえば、sendmailとpostfixは、メールサーバーの異なる実装。
実装は違うが、SMTPプロトコルでメールが送れるという
仕様は同じ。
しかし、正規表現とシェルとでは、実装が違うだけでなく、
仕様が違う。
だから、「実装が違うが、同じようなもの」みたいないい方は
それ自体が間違い。
0949名無しさん@お腹いっぱい。
2005/08/24(水) 10:30:12ところの「正規表現」を、あたかも Posix/Unix の正規表現をさす固有名詞の
ように扱っているから祖語が起きているんじゃねぇの?
0950名無しさん@お腹いっぱい。
2005/08/24(水) 10:49:54一つの形式で表現する方法のこと。正則表現(せいそくひょうげん)とも
呼ばれる。
アルファベット A={a1,...,an} 上の正規表現とは
1. 空記号列 ε は正規表現である
2. ai(Aの任意の要素)は正規表現である
3. X と Y が正規表現ならば、
1. X|Y も正規表現である
2. XY も正規表現である
3. {X}* も正規表現である
(以上Wikipedia日本語版)
glob() is a Unix library function that expands file paths according
to a minimal regular expression syntax. The syntax of glob patterns
is not identical with that of regular expressions used by Unix
utilities like grep.
(以上Wikipedia英語版)
後者glob()は要するにシェルのメタキャラクタ展開。ごらんの様に
正規表現の定義上も、glob()の定義上もglobは正規表現であることを
裏付けている。別に混乱も齟齬も起きてないよ。
0951名無しさん@お腹いっぱい。
2005/08/24(水) 11:06:47ワイルドカードは正規表現の真のサブセットなのに、
これをminimal regular expressionなんて呼ぶのが齟齬なんじゃないか。
どの正規表現にも対応するワイルドカード表記があると証明してくれたら、
その定義を受け入れるよ。
0952名無しさん@お腹いっぱい。
2005/08/24(水) 11:24:40そんなことを言い出したら、
「シェルって本当は貝っていう意味ですね。
だから、Bourne shやbashだけでなく、ほら貝やアサリ・シジミも
シェルですね」
と言っているようなもの。
UNIXで正規表現と言ったら、シェルのglobのことは指さない。
わかったら二度と出てくるな、ボケ。
0953名無しさん@お腹いっぱい。
2005/08/24(水) 11:32:250954名無しさん@お腹いっぱい。
2005/08/24(水) 11:38:57あのようなのは、「ばかまるだし」っていいませんか?
0955名無しさん@お腹いっぱい。
2005/08/24(水) 13:17:45globでX|Yや{X}*を表現できるのか?
0956名無しさん@お腹いっぱい。
2005/08/24(水) 13:56:31(http://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E8%A8%80%E8%AA%9E)
かって聞きたかったのだろう。
wikipeidaにもある通り正規表現とワイルドカードは全く別物
ワイルドカードで表現可能な言語は正規表現で表現できるが逆は不
可能なので両者は等価ではない。
0957名無しさん@お腹いっぱい。
2005/08/24(水) 14:02:54やれやれ、貼っとくか、
man 7 glob より:
NOTES
Regular expressions
Note that wildcard patterns are not regular expressions, although they
are a bit similar. First of all, they match filenames, rather than
text, and secondly, the conventions are not the same: e.g., in a regu-
lar expression `*' means zero or more copies of the preceding thing.
"wildcard patterns are not regular expressions"
と言ってるんだから明白だね。
ワイルドカードパターンと正規表現とは違う、
たとえ少し似てるところがあっても。
0958名無しさん@お腹いっぱい。
2005/08/24(水) 14:13:080959名無しさん@お腹いっぱい。
2005/08/24(水) 14:14:02本質を理解してなさそう。
マッチの対象がファイル名かテキストかの違いで、
*とかの表記の意味が違う、
といわれただけで納得か?
0960名無しさん@お腹いっぱい。
2005/08/24(水) 14:51:29globが正規表現の一種なら>>950が引用した定義により帰納的に定義される集合を
表現できなければならないが、その能力はない。
>>950は自分が引用したものの意味もわかっておらず自滅してる。
0961名無しさん@お腹いっぱい。
2005/08/24(水) 14:53:42本質も何も、UNIXでは、
ワイルドカードパターンのことは正規表現とは定義していない、
というだけのことではないのだろうか。
それ以外の定義を持ち出してUNIX板で議論するなら
板違いというべきもの。
0962950
2005/08/24(水) 15:33:14X*はたしかにないなあ。自滅だ。
>>961
sedのいうところの正規表現とegrepの正規表現はかなり異なるが、
どちらも正規表現と言っている。perlやphpはegrepに近いが、
いろいろ違う。だから、「UNIXでは」なんて言っても意味ないよ。
(POSIXのBREとEREは分かっててあえてsed,egrepと言ってるからね、念のため)
0963名無しさん@お腹いっぱい。
2005/08/24(水) 15:42:210964名無しさん@お腹いっぱい。
2005/08/24(水) 16:00:42だから、Basic RE と Extended RE は 正規表現と言っていいんだよ。
globはBasic REでもExtended REでもないから、
正規表現と言ってはいけない。言うと間違い。
0965名無しさん@お腹いっぱい。
2005/08/24(水) 16:13:04>正規表現と言ってはいけない。
ひどいな。
0966名無しさん@お腹いっぱい。
2005/08/24(水) 16:17:540967名無しさん@お腹いっぱい。
2005/08/24(水) 16:28:34自演乙。
glob を正規表現だと主張しているのはお前一人だけのようだ。
0968名無しさん@お腹いっぱい。
2005/08/24(水) 16:31:270969名無しさん@お腹いっぱい。
2005/08/24(水) 16:39:06ほんとだ
*(foo|bar)とかできるね、egrep式には(foo|bar)*の意で。
正規表現と言っていいかどうかまでは調べてないから分からんが。
シェルのファイルパターンマッチの場合、. .. / の扱いが正規表現と呼ぶのに
問題になりそうだ。(ファイルシステムの問題だけなら表現として無問題)
0970名無しさん@お腹いっぱい。
2005/08/24(水) 16:40:290971名無しさん@お腹いっぱい。
2005/08/24(水) 16:42:16「シェルで使えるワイルドカード等は正規表現ではありません。
正規表現の話題はスレ違い(sedスレへ)」
と、明記希盆。
0972名無しさん@お腹いっぱい。
2005/08/24(水) 16:51:07950が撤回してるからもう一人もいないんじゃないか?
今は964の変な理屈(たぶん釣り)に反応してるだけで。
0973名無しさん@お腹いっぱい。
2005/08/24(水) 16:51:560974名無しさん@お腹いっぱい。
2005/08/24(水) 16:56:130976名無しさん@お腹いっぱい。
2005/08/24(水) 21:41:010977名無しさん@お腹いっぱい。
2005/08/24(水) 21:41:540978名無しさん@お腹いっぱい。
2005/08/24(水) 22:04:16何を言っているのやら。
「マッチ対象」は関係無いでしょう。ファイル名に対してregexpを使うこともできるし、
テキストに対してもワイルドカードパターンを使えるのだから。
実装も違う、仕様も違うものをごっちゃにされても困る。
「経済の世界では、defaultの意味は云々」のレベル。
0979名無しさん@お腹いっぱい。
2005/08/24(水) 22:13:030980名無しさん@お腹いっぱい。
2005/08/24(水) 22:15:410981名無しさん@お腹いっぱい。
2005/08/24(水) 22:24:430982名無しさん@お腹いっぱい。
2005/08/24(水) 22:26:170983名無しさん@お腹いっぱい。
2005/08/24(水) 22:59:56あほか
>>957をすみからすみまで読め
0984名無しさん@お腹いっぱい。
2005/08/24(水) 23:06:25「日常の世界ではメモリーは思い出の意味」
で、同じような例、>>985 どうぞ…
0985名無しさん@お腹いっぱい。
2005/08/24(水) 23:18:090986名無しさん@お腹いっぱい。
2005/08/24(水) 23:33:10シェルを実行するときに . を付けるのはなぜ?
$. 2ch.sh
0987名無しさん@お腹いっぱい。
2005/08/24(水) 23:44:11お前さん、何か壮大な勘違いをしてないか?
それともアレか、$PATHの最後に./を入れる派の振りをした壮大な釣りか?
0988名無しさん@お腹いっぱい。
2005/08/24(水) 23:44:13子プロセスを起動させないため
0989名無しさん@お腹いっぱい。
2005/08/24(水) 23:49:160990名無しさん@お腹いっぱい。
2005/08/24(水) 23:51:56勘違い?考えすぎじゃない?
もしかして、カレントディレクトリに対してパスを通す事を行っているの?
でもそれって、本来なら./2ch.shとやるべきでは??
>>988
そうなの?え、いや、でも、子プロセス起動したよ?
$. 2ch.sh で、2ch.shの中からさらに2ch.shを呼び出しますたよ
0991名無しさん@お腹いっぱい。
2005/08/24(水) 23:53:000992名無しさん@お腹いっぱい。
2005/08/24(水) 23:58:13こいつの正体はいったい・・・
0993名無しさん@お腹いっぱい。
2005/08/25(木) 00:00:54「シェルを」っていうか「シェルスクリプトを」だろ。
>>990
> そうなの?え、いや、でも、子プロセス起動したよ?
どうやって確認したの?
>>992
man sh とか。
bash なら help . とか。
0994名無しさん@お腹いっぱい。
2005/08/25(木) 00:05:04それ、どこで覚えたの?
0995名無しさん@お腹いっぱい。
2005/08/25(木) 00:08:30丁寧にありがとう、お兄ちゃん♥
英語が出てきてよく理解できなかったけど、
$PATHを読みにいかないでね、ってお願いしてるんだね♪
子プロセスの生成は、プロセスIDとユーザIDをpsコマンドで確認したよ♪無限ループになるからすぐわかるよ
0996sage
2005/08/25(木) 00:08:510997名無しさん@お腹いっぱい。
2005/08/25(木) 00:09:56シェルスクリプト総合 その3
http://pc8.2ch.net/test/read.cgi/unix/1124889646/
0998名無しさん@お腹いっぱい。
2005/08/25(木) 00:11:10なんかの雑誌のシェルスクリプトの入門記事に書いてあった
いままで漠然と使っていたけど、ふと疑問に思ってネットを調べたら、 . じゃなかなか検索できんわな
0999名無しさん@お腹いっぱい。
2005/08/25(木) 00:11:24「.」を使っても$PATHは見る
1000名無しさん@お腹いっぱい。
2005/08/25(木) 00:11:47おや?
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。