シェルスクリプト総合 その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/
0664名無しさん@お腹いっぱい。
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」と書けばよかったのに
■ このスレッドは過去ログ倉庫に格納されています