シェルスクリプト総合 その2
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
2005/04/17(日) 00:17:17まずは注意点、リンク、地鎮祭など(>>1-10くらい)をご覧ください。
□前スレや過去スレ:
シェルスクリプト総合 その1
http://pc8.2ch.net/test/read.cgi/unix/1101820646/
☆シェルスクリプトを勉強するにあたって☆
http://pc5.2ch.net/test/read.cgi/unix/989659936/
便利なシェルスクリプト見せろ
http://pc5.2ch.net/test/read.cgi/unix/996949546/
【貝】第1回シェル講座【殻】
http://fun.kz/test/read.cgi/unix/1016372780/
□関連スレ:
sed
http://pc8.2ch.net/test/read.cgi/unix/1085730992/
おまえら! shell は何を使っているんですか?
http://pc5.2ch.net/test/read.cgi/unix/1012330865/
Eshell の使い方とか設定とか【Emacs Shell、Lisp】
http://pc8.2ch.net/test/read.cgi/unix/1102921590/
□他板の関連スレ:
Macでシェルスクリプト総合 Part 1
http://pc7.2ch.net/test/read.cgi/mac/1105074933/
【Shell】どのシェル使ってる?【Script】
http://pc8.2ch.net/test/read.cgi/linux/1067330754/
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 ...]
$
■ このスレッドは過去ログ倉庫に格納されています