08/06/19 18:08:53 qZMvy29K
>>199
ありがとうございますm(_ _)m
201:login:Penguin
08/06/19 23:30:35 JFsnEc1J
>>196
なるべく一つのファイルにまとめたいんで。。。アドバイスありがとうございます。
>>197
197さんのアドバイスを参考にして、perlの行を下のように書くと動きました。
tmp=`perl -e '$a = "'"$i"'"; if ( $a=~ /^\S+(\S{1})$/ ) { print "s${ 1 }x_player" }'`
しかし、こう書くと$aの前のシングルクォーテーションがバッククォーテーションで
perlを実行した時に消えると思うのですが、sh -x で確認して見ると消えてません。
これで正しく書けているんでしょうか?勉強不足ですみませんがよろしくお願い致します。
202:login:Penguin
08/06/20 08:28:49 PYgL06kk
evalに渡すと消えるという意味なら。
tmp=`eval perl -e "'"'$a = "'"'""$i""'"'"; if ( $a=~ /^\S+(\S{1})$/ ) { print "s${ 1 }x_player" }'"'"`
203:login:Penguin
08/06/20 09:48:11 mQhh6bQc
tmp=$(perl -e 'print "s${1}x_player" if $ARGV[0]=~/^\S+(\S{1})$/' "$i")
204:login:Penguin
08/06/21 01:08:40 lACEyUp0
shでスクリプトを走らせている時に
スクリプト内でスーパーユーザの権限を得るにはどうやったらいいのでしょうか
スクリプトにsuを埋め込むとスクリプトが止まってしまって
exitしてから再びスクリプトが動き出すのですが
権限だけ持たせてスクリプトをそのまま走らせたいと思っています
何か手は無いでしょうか
205:login:Penguin
08/06/21 01:11:38 4k/SNXDG
>>204
sudo
206:login:Penguin
08/06/21 01:42:03 EyYhn7dK
リサ
207:login:Penguin
08/06/21 01:49:53 lACEyUp0
>>205
ありがとうございます
(自分にとっては)有用なスクリプトが組めましたm(_ _)m
感謝の極みです
208:login:Penguin
08/06/21 12:58:15 9C5PYE0l
ふとした疑問だが、スクリプト内でスーパー・ユーザにスイッチするのと、スクリプト自体をスーパー・ユーザ専用にするのと、どちらが安全なのだろう。
209:login:Penguin
08/06/21 13:28:05 ESYd9xh6
>>208
運用の仕方によって変わるでしょ。
一概にどちらが安全とか言えないよ。
210:login:Penguin
08/06/22 13:34:22 IsXP6W78
標準出力は標準出力のままで標準エラーだけをパイプしたいのですが
どのようにすればよいですか?(sh)
211:login:Penguin
08/06/22 13:38:00 aBc+5bz2
exec 3>&1
(echo stdout; echo stderr >&2) 2>&1 1>&3 | rev
212:210
08/06/22 13:59:15 IsXP6W78
>>211
どうもありがとうございました。
213:login:Penguin
08/06/22 16:57:49 3HpeFvyL
あれ?更新されてない
214:login:Penguin
08/06/22 17:03:12 3HpeFvyL
rsyncをあえてつかわずローカルでのWEBサイトの更新を別のPCへFTP(put)
したいのですが混乱してきましたどなたかわかりますでしょうか?
#!bin/sh
#pukiwiki内のファイルで更新のあったファイルのあぶりだし。
echo = "`ls --full-time -F`" > fulltime
awk '{print $6$7}' /var/www/html/pukiwiki/fulltime
awk '{print $6$7}' /var/www/html/pukiwikibk/fulltime2
diff=diff /var/www/html/pukiwiki/fulltime /var/www/html/pukiwikibk/fulltime2
#diffの中身が空なら抜ける
if [ "$diff"-eq /dev/null ];then
logout
#diffの内容がディレクトリなら再度中身のファイルの更新がないかを確認。
#diffの中から$10のファイル名を取り出す
215:login:Penguin
08/06/22 17:04:18 G5GD5xl+
>>214
lftp使え。
216:login:Penguin
08/06/22 17:13:28 3HpeFvyL
わかりました。ありがとうございます。lftp調べてみます。
217:login:Penguin
08/06/22 17:19:23 3HpeFvyL
ローカルになく、リモートにのみあるファイルを削除したいときは
mirror -R -e
や
mirror -e
などできるみたいですが、
ローカルで更新されたファイルのみアップといったこともできるのでしょうか?
218:login:Penguin
08/06/22 17:47:05 3HpeFvyL
#!/bin/sh
cd /var/www/html/pukiwiki
lftp -e "mirror -e -vvv pukiwiki; bye" ftp:XX.XX.XX.XX/var/www/html/pukiwiki
これだけでいけますでしょうか?
219:login:Penguin
08/06/22 18:16:38 7nMjRrut
n 更新されたのみ
mirror -Rn
220:login:Penguin
08/06/22 22:21:11 R/kAIh0A
ubuntu初心者スレから誘導されました。
成形した時刻の文字列をクリップボードにコピーするシェルスクリプトを作りたいのですが
まずdateで時刻を取得出来ることがわかりました。それで日付や時間を成形してみました。
で、その取得した時刻をクリップボードにコピーさせる方法が分かりません。
ubnutuは8.04です。よろしくお願いします。
221:login:Penguin
08/06/22 22:29:53 G5GD5xl+
>>220
xclip が使える。ただし日本語が通らない。
ruby がクリップボード操作できるみたい。
222:login:Penguin
08/06/22 23:37:38 MIeLc8tv
シェルスクリプトで正規表現使いたいのですが、
末尾が .jp のものだけマッチさせたい場合は
$\.jp
でよろしいのでしょうか?
223:login:Penguin
08/06/22 23:55:19 iLaxDbCt
シェルだけで正規表現って扱えるの?
224:login:Penguin
08/06/23 00:09:49 xSXSaj7v
>>223
[[ 'www.example.jp' =~ '\.jp$' ]] && echo OK
225:login:Penguin
08/06/23 00:26:20 bFQcdw6C
>>223
man expr
226:login:Penguin
08/06/23 07:14:57 xSXSaj7v
>>225
expr は外部コマンドじゃね?
227:login:Penguin
08/06/23 07:23:33 /dfygF5Q
bash 3.2.33だが>>224だとOKと表示されない件について
228:login:Penguin
08/06/23 07:55:06 xSXSaj7v
quote しちゃだめになったのか。
[[ 'www.example.jp' =~ \.jp$ ]] && echo OK
229:login:Penguin
08/06/23 08:04:56 E3xyu4wD
>>221
そうですか。日本語通らないですか。
rubyがいけるならPythonもいけるのかな。探してみます。ありがとうございます。
230:login:Penguin
08/06/23 13:11:35 R4pyjC2R
>>229
xselでおk
231:login:Penguin
08/06/23 20:44:19 E3xyu4wD
>>230
さっそく入れて使ってみました。
中クリックで文字列を選択した内容をそのまま貼り付けれてものすごく便利でした!
いいものを知りました。ありがとうございます。
で本題
スクリプトはこんな感じまで書きました。
#!/bin/bash
y=`date +%Y`
m=`date +%m`
d=`date +%d`
t=`date +%T`
DATE= $y/$m/$d/" "$t
echo $DATE
これで、chmod -x で権限を与えて実行すると、現在の時間を返してくれるようになりました。
が、xselを使って$DATEをクリップボード(かプライマリ)にコピーする方法が分かりませんでした。--inputは変数が代入出来ないようですし。
xsel -p < $DATE ではうまくいきませんでした(ファイルじゃないので当たり前ですか)
232:login:Penguin
08/06/23 20:57:33 II3EglSV
>>231
>xsel -p < $DATE ではうまくいきませんでした
echo $DATE > xsel -p
233:login:Penguin
08/06/23 21:41:12 t++FsyID
echo $DATE | xsel -i
234:login:Penguin
08/06/23 21:51:30 E3xyu4wD
>>232
どうもうまくいきませんでした。
修正したものを実行すると、~.shと同じディレクトリに xsel という中身が"-p"の入ったファイルが作成されてました。
235:login:Penguin
08/06/23 21:54:47 eV6dG77Y
>>234 look asap >>233
236:login:Penguin
08/06/23 22:05:35 E3xyu4wD
>>233
こちらもうまくいきませんでした。
実行すると、以下の結果が表示されました。
./date_clipboard.sh: 7: 2008/06/23/ 21:52:49: not found
/が入っていると、ディレクトリと認識してしまうのではないかと思って、/を外して数字だけ並んだものも作って見ましたが、だめでした。 同じく echoで$DATEの中身とnot foundと出されました。
>>235
こういうことでしょうか?
#!/bin/bash
y=`date +%Y`
m=`date +%m`
d=`date +%d`
t=`date +%T`
DATE= $y/$m/$d/" "$t
look asap
echo $DATE | xsel -i
これを実行しても、同じく、echoで$DATEの中身とnot foundと出ました。
237:login:Penguin
08/06/23 22:18:40 t++FsyID
#!/bin/sh
date "+%Y/%m/%d %T" | xsel -i
238:login:Penguin
08/06/23 22:26:25 E3xyu4wD
>>237
おお! 見事に表示されました。
dateごと渡してやればよかったのですね。勉強になりました。
ありがとうございました。
239:232
08/06/23 22:40:24 7JKTU8Gt
ごめん! (汗)
240:login:Penguin
08/06/23 22:50:21 xSXSaj7v
>>238
> dateごと渡してやればよかったのですね。
別に echo $DATE | xsel -i でもいいよ。
241:login:Penguin
08/06/23 22:51:35 xSXSaj7v
>>236
> DATE= $y/$m/$d/" "$t
問題はここだ。
= の後の空白が余分。
むしろ
DATE="$y/$m/$d/ $t"
と書くべき。
242:login:Penguin
08/06/24 08:29:39 /ei8InYp
>>239
いえいえ。
>>240-241
空白がまずかったのですね。気がつきませんでしたorz
ダブルクオーテーションでくくると文字列がそのまま出てくる気がして、
> DATE= $y/$m/$d/" "$t の途中の" "は空白を出力したつもりでしたが、全体をくくってやってもよかったのですね。実行して確認しました。
#!/bin/sh
y=`date +%Y`
m=`date +%m`
d=`date +%d`
t=`date +%T`
DATE="$y/$m/$d/ $t"
echo $DATE | xsel -b -i
(xsei -b -iでクリップボードにもコピー出来るようにしてあります。xsel -pでも動きました。)
見え栄は>>237のほうがいいですねw
勉強になりました。ありがとうございました!
243:login:Penguin
08/06/24 08:33:49 /ei8InYp
一部ミスりました
× ダブルクオーテーションでくくると文字列がそのまま出てくる気がして、
○ ダブルクオーテーションでくくると文字列がそのまま出てくる気がして、 全体をくくらずにしていました。
244:login:Penguin
08/06/24 09:36:52 7q12wxxB
>>242
> ダブルクオーテーションでくくると文字列がそのまま出てくる気がして、
URLリンク(www.linux.or.jp)
YEAR=2008
echo "$YEAR"
echo '$YEAR'
245:login:Penguin
08/06/24 10:37:39 /ei8InYp
>>244
そうだったのですか、シングルクオーテーションは文字として出てきて、ダブルクオーテーションでは、$も例外として、$が機能すると言うことですか。
いやはや知らないことだらけでした。勉強になります。ありがとうございます。
246:login:Penguin
08/06/24 19:18:26 GHnoP+if
初心者の書くスクリプトは、むしろダブルクォートを忘れて
インジェクション的な事故多発なわけですがw
if [ x"$HOGE" == x"DQN" ] ; then
ちゃんとこういう風にまで保護されているスクリプトは稀。
247:login:Penguin
08/06/24 19:36:34 RnXDPQy/
俺さ、その x が何のためにあるのか、以前から不思議なんだ。
if [ "${HOGE}"="DQN" ] ; then
との違いは何?
248:login:Penguin
08/06/24 19:40:10 y8G0f9r3
$HOGEが未定義の場合どうなるんだ?
249:login:Penguin
08/06/24 19:41:45 7q12wxxB
>>247
= と == は違う。
== の前後に空白が必要。
その上で、$HOGE が空文字列の場合にエラーになるのを回避するため。
250:login:Penguin
08/06/24 19:50:56 GHnoP+if
>>247 の = は == の typo でしょうw
で、"${HOGE}" == "DQN" だったら $HOGE が未定義でもエラーにならない。
x"$HOGE" == x"DQN" との違いは漏れは知らん。ジジイ仕様の /bin/sh とかが
あって "${HOGE}" できない場合があるんじゃない?
× export HOGE="DQN"
○ HOGE="DQN"; export HOGE
こんな環境もあるぐらいだからなぁ・・・・・・
251:login:Penguin
08/06/24 20:00:18 7q12wxxB
>>250
> で、"${HOGE}" == "DQN" だったら $HOGE が未定義でもエラーにならない。
bash はそうだけど、エラーになるシェルもある。
Solaris の /bin/sh とか。
252:login:Penguin
08/06/24 20:07:28 GHnoP+if
やはり Solaris かw そんな気はしていた。
普段は Linux 使ってるから必然と bash になっちゃうんだよね。sh で出来たっけ?
とか結構記憶が曖昧になってしまって鬱。場合にもよるけど、ポータビリティを
意識してなーんとなく昔ながらの書き方を守ってる漏れ・・・・・
あえて #!/bin/bash って書くべき?w
253:login:Penguin
08/06/25 02:03:39 QRiAgjkv
Solarisの古いshなんて無視していいだろ。
POSIX shell (ash, bash, ksh, ...) で動けばいいよ
254:login:Penguin
08/06/25 03:24:07 CH5fnn3k
実際 そんなに拡張されてないし でしょw
#!/bin/bash
でいいよね。
255:login:Penguin
08/06/25 03:42:02 r4HiK5gk
>>254
スクリプト動かすのに重量級のbashなんか使わないだろ。
#!/bin/sh
で十分。
256:login:Penguin
08/06/25 04:07:08 CZiflGY7
>>255
先生!うちの環境では
file /bin/sh
/bin/sh: symbolic link to `bash'
です.どうすればいいですか?
257:login:Penguin
08/06/25 04:46:49 N+m64wV+
>>255 i486SX/16MHz
258:login:Penguin
08/06/25 04:59:00 CH5fnn3k
だから もう 手じかな環境では
/bin/shはないでしょ。
/bin/shと書けばいちおー 互換モードで動くってだけで。
259:login:Penguin
08/06/25 10:58:55 NWVIKvCl
FreeBSDの事もあるしshで書いておこうってだけじゃね
260:login:Penguin
08/06/25 11:25:51 r4HiK5gk
debian 系だと
$ file /bin/sh
/bin/sh: symbolic link to `dash'
~$ ls -l /bin/bash /bin/dash
-rwxr-xr-x 1 root root 686K 2008-05-13 03:33 /bin/bash*
-rwxr-xr-x 1 root root 79K 2008-03-12 20:22 /bin/dash*
サイズが全然違う。
261:login:Penguin
08/06/25 11:46:13 e3mj3BLL
別にどっちかに決める必要なんてない。
portabiltiy が必要なスクリプトは protable に書く。
そうでなければ bash 依存な書き方をしてもいい。
それだけのこと。
262:login:Penguin
08/06/25 12:06:01 foNddTWJ
>>256
ぶっちゃけbashはzshよりも遅い。軽量のashなんかとは比べるべくもなく。
ログインシェルとしてなら使い勝手云々ってのがあるけど、
/bin/shをbashにしておくメリットはあんまないよ。
263:login:Penguin
08/06/25 12:36:18 Qkn+OwYP
なんかもっともらしいウソが垂れ流されてるぞ。
>>251
>> で、"${HOGE}" == "DQN" だったら $HOGE が未定義でもエラーにならない。
>bash はそうだけど、エラーになるシェルもある。
>Solaris の /bin/sh とか。
solaris ではたしかにエラーになるけど、それは $HOGE が未定義だからではない。
== という演算子自体がないため。
互換性を考えると文字列の比較には == ではなく = を使う。
= なら $HOGE が未定義でもエラーにならない。
x"$HOGE" のようにするのは、$HOGE が -f とか ! のような文字列だったときに
別の意味に解釈されないようにする対策。
264:login:Penguin
08/06/25 17:32:32 PrRjFF/A
マジッスカ
ちょっとコンビニで Soliras 買ってくる><
265:login:Penguin
08/06/25 20:22:07 g812rZ0o
>>251
Sun4 で試したら、未定義でもエラーにならんかったよ。
$ cat test.sh
uname -rvs
VAR="VAL"
[ "${VAR}" = "VAL" ] && 'true'
[ x"${VAR}" = x"VAL" ] && 'true'
unset VAR
[ "${VAR}" = "VAL" ] && 'true'
[ x"${VAR}" = x"VAL" ] && 'true'
$ /bin/sh -x test.sh
+ uname -rvs
SunOS 4.1.4-JL 2
VAR=VAL
+ [ VAL = VAL ]
+ true
+ [ xVAL = xVAL ]
+ true
+ unset VAR
+ [ = VAL ]
+ [ x = xVAL ]
266:login:Penguin
08/06/26 15:09:48 ZojLTS6b
お邪魔します。
シェルスクリプトを走らせて、あるシェルスクリプトを起動させるようにするにはどういう書き方したらよいですか。
また、そのシェルスクリプトを走らせた結果を変数にぶちゅっと入れる書き方はどうしたらいいですか。
267:login:Penguin
08/06/26 15:35:52 ZojLTS6b
事故解決しますた。すいません。
268:login:Penguin
08/06/26 22:18:06 ZPxwXTvf
ぶちゅっ
269:login:Penguin
08/06/28 20:17:43 /ZK60QF9
シェルでエロゲをつくるためにはどうしたらいいですか
270:login:Penguin
08/06/28 21:21:44 MDU5A1fa
エロゲって何ですか
271:login:Penguin
08/06/28 22:52:16 /ZK60QF9
linuxがwindowsに唯一負けてるのがエロゲです
272:login:Penguin
08/06/28 23:29:11 fs03Gty7
だとすれば、sh スクリプトでなく、BAT ファイルで作ると良いのではないでしょうか
273:login:Penguin
08/06/28 23:48:10 ZJYzC1iZ
windowsに対抗するため、Linuxにエロゲを導入します
また、複数のplayerがエロゲサーバにtelnetしてplayすることを想定としているため
GUIではなくCUIで行いたいと思っています
274:login:Penguin
08/06/29 00:53:49 nwf205tS
>>273
CUIでいかにエロさを出すかが問題だ
絵もない本当のノベルゲームでいいっていうなら、
ひたすらechoとifとかwhileとかcaseを駆使すればできる気がするけど
今どきtelnetってのもツッコミどころだけどな
275:login:Penguin
08/06/29 01:02:35 wXyVSJIl
Nethackはエロゲ
異論は認める
276:login:Penguin
08/06/29 01:16:19 4XAvfgBl
NetHackを2ch-AA拡張すればエロくなる。
主人公:( 'A`)
ヒロイン:J( 'ー`)し
てな具合。そんでもって濡れ場ではフルスクリーンAAでアニメーションするの。
277:login:Penguin
08/06/29 02:09:45 O4g3tYWz
エロゲの話はこっちで。
Linuxで動くオープンソースエロゲを作ろう!2
スレリンク(linux板)
278:login:Penguin
08/06/30 18:35:41 Y3MWGahT
Linux + Darwin Streaming Server で自分専用の放送局を何チャンネルも建てて
どこでも自分のコレクションした音楽を聞けるようにして楽しんでいるのですが、
面倒くさいのは、メタファイルを用意せねばならない点。
例えばマイケル・ジャクソンだけを集めた専門局を作るとします。これを
1). URLリンク(www.example.com)
2). URLリンク(www.example.com)
などといったメタファイルに、以下のような内容を記述しておいてやらねばなりません。
1). [playlist]
File1=URLリンク(www.example.com:8000)
Title1=nina
Length1=-1
NumberOfEntries=1
Version=2
2). URLリンク(www.example.com:8000)
ま、大した量じゃないので、今まではいちいち手作業で cp して vi で編集していたのですが、
これを、例えば
$ mkpls michael
などと言った変数 $streaming_name を与えれば、
自動的にファイル内の特定の部分も書き換えて、
かつ、.pls .m3u それぞれのストリーミング用メタファイルも
まとめて生成してくれるようなスクリプトがあれば便利なのに、
と思っているのですが、どう書けばいいのかサッパリ解りません。
基本は、単に変数を含んだひな形を用意し、ひな形を複製、与えられた変数を代入して、
変数の名前+拡張子で保存、というだけのことだと思うんですが。。。。orz
279:login:Penguin
08/06/30 22:16:41 mYyaCshH
超入門者です。下記内容のシェルを作成しなければならないのですが、参考書を見てもよく分からず
知り合いにも分かる人間がおりません。。ごめんなさい、どなたかご教授頂けないでしょうか?
・/var/log/mailを解析して特定のユーザに関する調査を実施して結果をファイル出力する。
(条件)
・スクリプトの実行形式は「スクリプト名 ログファイル名 メールアドレス」
・受信メール数と送信メール数を集計する。
・調査をするユーザは引数として与える。
・調査をするユーザはtest@toyo.co.jp
どのような記述にすれば良いのか、参考となる情報を何でも構いませんのでお願いいたしますm(__)m
280:login:Penguin
08/06/30 22:19:25 LfTOpvVG
>>279
grep $2 $1 | wc -l
さっさと学校辞めて派遣労働者にでもなってしまえ。
その方が親孝行だ。
281:login:Penguin
08/06/30 22:51:24 LE+io00E
シェルからwindowsにrshのような感じでコマンドを打ちたいんですが、
telnetを使ったりしてどうにかならんでしょうか?
282:login:Penguin
08/06/30 22:51:47 LfTOpvVG
>>281
expect
283:login:Penguin
08/06/30 22:55:37 pVpnujlR
>>279
スクリプト以前にひょっとしてシェルプロンプトで何も叩いた事がないほど初心者?
284:login:Penguin
08/06/30 23:08:10 mYyaCshH
279です。
>>280
その言葉真摯に受け止めます。ですが今後努力する所存です。
すいません。諸事情で時間がない中でしたのでこちらで質問させて頂きました。
参考情報ありがとうございます。
>>283
簡単なコマンドなら叩いたことはありますがシェルは全くの初心者です。
どうか宜しくお願い致しますm(__)m
285:login:Penguin
08/06/30 23:13:41 LE+io00E
>>282
家のfedoraでインストールして試してみてexpectすげーと思ったけど、業務用のredhat 3 には多分入ってないです・・・
ありがたいですけど、他にないですか?
286:login:Penguin
08/06/30 23:35:01 EeC8VQhU
>>285
Expect.pmとかopen3.rbとか・・・
最悪openptyで相当品を書けばいい。tccで書けばそれでもスクリプト。
287:login:Penguin
08/06/30 23:41:54 pVpnujlR
>>284
それじゃまずgrepを使ってあるユーザーの受信メールの行と送信メールをどうやったら切り出せるか
試行錯誤し、それが出来たらwc。 ひっかかったらgrepのmanページでまず回答を探す努力を。
awkとかのほうが色々柔軟性があるけどたぶん使った事無いでしょう。
あと>>3のリンク先をいくつかながめるといいと思う。
288:login:Penguin
08/06/30 23:48:15 hskJhfYi
初心者です。お願いします。
cutコマンドはファイルのみ使えますか?
変数にも使えるでしょうか。
変数に格納してある文字列からcut.grepを使いたいんですが。
289:login:Penguin
08/06/30 23:49:01 mYyaCshH
>>287
ご教示いただいた方法にて調べてみます。本当にありがとうございますm(__)m
290:login:Penguin
08/06/30 23:54:15 LE+io00E
>>286
それらはアプリでしょうか?
インストールが必要なのはNGなんです。
標準的なコマンドで実装できれば・・
291:login:Penguin
08/07/01 00:23:35 7AvBIvdb
>>278
plsとm3uは多くのプレイヤーが使ってる形式のようですから
お使いのプレイヤーにその機能がないか確認してはいかがでしょう。
プレイヤーをお使いでないならこういうものもあります。
URLリンク(freshmeat.net)
ビルドにuriparserを求められますがconfigureに--disable-xspfを
つけると要らなくなります。
292:login:Penguin
08/07/01 00:37:40 F/ZP/0+B
>>278
外してるかもしれないのですがこれだけで十分ですかね
#!/bin/sh
streaming_name=$1
cat <<END >$streaming_name.pls
[playlist]
File1=URLリンク(www.example.com:8000)
Title1=nina
Length1=-1
NumberOfEntries=1
Version=2
END
cat <<END >$streaming_name.m3u
URLリンク(www.example.com:8000)
END
293:login:Penguin
08/07/01 01:20:48 DL3owd7E
>>288
$echo 1111 bbbbbb | cut -f1 -d ' '
で1111と表示できるからcutにパイプして
echo $var | cut -fx
で出来る
変数にファイル名を入れてる場合なら
cut -fx < $filename
でおk
あとはエスパーじゃないんで分からん
294:login:Penguin
08/07/01 07:30:47 /iSyGj3E
>>288
echoしてリダイレクト。基本。
295:login:Penguin
08/07/01 10:01:29 ckhBGtgF
質問です。
変数の中に=があったらそれまでの文字を出力したいんですが、
例)$1に abc=defg -> abcのみ出力
$2に abcdefgh -> 何もせず
こういった場合、abcを取り出す(=の前までCUT?)事はできますか?
if(( grep '=' $1 ))
then
cut~
みたいになるんでしょうか。お願いします。
296:login:Penguin
08/07/01 10:12:23 wSJ46Tmn
>>295
case "$1" in
*"="*) echo "$1" | sed 's/=.*//' ;;
esac
297:login:Penguin
08/07/01 10:25:43 sgtpdcHD
bashで
x=$1
p=${x%=*}
[ $x = $p ] || echo $p
298:login:Penguin
08/07/01 10:28:44 ckhBGtgF
>>296
即レス有難うございます!お陰様で出来ました^^
299:login:Penguin
08/07/01 10:37:02 wSJ46Tmn
>>297
それだと $1 が「/tm*/=xx」とかのときうまくいかない。
300:login:Penguin
08/07/01 10:58:55 HD46/kcy
>>295
>(=の前までCUT?)
>>296 で sed の例が出てるけど
cut -d "=" -f 1
とか
awk -F "=" '{print $1}'
とかでもできる。
301:login:Penguin
08/07/01 11:57:13 ckhBGtgF
>>296,>>297,>>300の皆さん有難うございます!
302:login:Penguin
08/07/01 12:12:55 ckhBGtgF
すみません、力を貸して下さい。
今やらなければならないのが、lsuser ALL を叩いて、
出力結果を見出し付で出力する(体裁を整える)です。
現在見出しの部分でつまずいています。
bin id=2 pgrp=bin groups=bin,sys,adm home=/bin
guest id=100 pgrp=usr groups=usr home=/home/guest
などを
user_name id pgrp groups
bin 2 bin bin,sys,adm
guest 100 usr usr
と言った感じです。=の前後でCUTし、前部分を見出しに、
後部分を見出しの下に出したいです。難しいのが、既に見出しにidがあるのに
また見出しにidが追加されてしまうんです。
どなたかサンプルを作っていただく、またはアドバイスを頂けますでしょうか。
よろしくお願いします。長文・乱文すいません。
303:login:Penguin
08/07/01 12:33:08 wSJ46Tmn
>>302
perl か何かで書いた方が早いと思う。
304:login:Penguin
08/07/01 12:44:02 ckhBGtgF
>>302
アドバイス有難うございます。調べてみます!
書き忘れたんですが、KORNシェルです。
305:login:Penguin
08/07/01 12:46:37 EG1sJMbp
実用的な答が欲しいならもう少し環境を書くべきだ.
bash,sed,awk,perlなどが使えるのかどうかとか.
それともシェルだけでアクロバティックにこなしたいのか?
306:login:Penguin
08/07/01 12:50:08 wSJ46Tmn
そもそも使ってる OS は何よ。
307:login:Penguin
08/07/01 13:03:02 Arg2/vlJ
>>292
ありがとうございます。バッチリでした。
いやー楽になった。っていうか勉強になりました。
みなさん、どういうところで構文を学んでいらっしゃるんでしょう?
この手のことについては完全に無学なもので、
どこからどう手をつけていいやら分かりません。
308:login:Penguin
08/07/01 13:21:36 wSJ46Tmn
>>307
テンプレくらい読め。
309:login:Penguin
08/07/01 13:31:41 ckhBGtgF
302です。環境はUNIX AIXです。そしてKORNシェルです。
310:login:Penguin
08/07/01 13:39:10 wSJ46Tmn
>>309
なら板違い。
311:login:Penguin
08/07/01 13:42:53 F/ZP/0+B
IFSに=を加えて行ごとにsetすると簡単
312:login:Penguin
08/07/01 13:48:38 ckhBGtgF
>>310さん すいません板違いでしたか。移動します。
>>311さん やってみます。有難うございます。
313:login:Penguin
08/07/01 17:29:52 0HA3LMf0
今日の宿題スレッドはここですか?
314:login:Penguin
08/07/01 20:13:34 sk7tfsLb
>>309
そういえばIBMのTivoli agent for Linuxをインスコしようとしたら
インストーラーがkshを必要としやがった。
315:login:Penguin
08/07/02 07:58:38 kAlrwjxr
>>302
俺には難しかった・・orz
誰か見本よろ
316:login:Penguin
08/07/02 11:59:47 t4E6Zbe3
>>302
#!/bin/sh
st=true
while read s
do
rctop=null
rc=null
for n in $s ;do
if [ $st = true -a "$rctop" = "null" ] ;then
rctop=user_name
fi
if [ "$rc" = "null" ] ;then
rc=$n
else
if [ $st = true ] ;then
rctopadd=`echo -n $n | cut -d '=' -f 1`
rctop=`echo $rctop $rctopadd`
fi
rcadd=`echo -n $n | cut -d '=' -f 2`
rc=`echo $rc $rcadd`
fi
done
if [ $st = true ] ;then
echo $rctop
st=false
fi
echo $rc
done
$./shellscript.sh < n.data
理想の動作じゃないだろうが
フォーマットをこっちが指定するやり方として…あとは整形の仕方だな
317:login:Penguin
08/07/02 12:18:34 15uy4jBz
>>312 で移動するって言ってるんだから
もうここで言ってもしょうがないんでは。
318:login:Penguin
08/07/02 13:02:11 t4E6Zbe3
('A`)スマソ
319:login:Penguin
08/07/02 15:26:35 BlTL/xTh
>>316>>317>>318
どこに行っていいかわからなくて、ちょくちょく覗いてましたw
>>316を参考にしたら、思ったとおりの動きをしてくれました。
本当に有難いっす。
320:login:Penguin
08/07/02 15:29:18 15uy4jBz
さっさと消えろ。
シェルスクリプト総合 その11
スレリンク(unix板)
321:login:Penguin
08/07/02 18:57:00 iGIzjxTr
質問です。
たとえば、
cat test
1
2
3
4
5
と表示されるシェルスクリプトがあったとして、それを
5
4
3
2
1
と表示させるにはどうしたらいいでしょうか?
322:login:Penguin
08/07/02 18:59:10 15uy4jBz
>>321
tac test
323:login:Penguin
08/07/02 19:12:45 iGIzjxTr
>>322
即答ありがとうございますっ
324:login:Penguin
08/07/02 23:09:21 tYZaCcmU
>>322
しっ、知らなかった... なんつー冗談ネーミング。 いつからあるの? 発祥はgnuかな。 Wikipediaにも
載ってない。
325:login:Penguin
08/07/02 23:11:36 tYZaCcmU
>>324
あ、あったわ。 tac(Unix)であった。
326:login:Penguin
08/07/03 07:56:36 HJXPhQch
Terrible-monster Attacking Crew
327:login:Penguin
08/07/04 00:23:17 Z8+RYNGO
cat tac
most more less
head tail
cut paste
pgp gpg
mail nail
言葉遊び系のコマンドペアって案外少ないんだな。
328:login:Penguin
08/07/04 01:21:52 7gcupJvt
if fi case esac
#ここはコマンド以前にシェルスクリプト スレだよな
329:login:Penguin
08/07/04 01:24:49 9pO2naUI
esac にはびっくりしたなーもー
330:login:Penguin
08/07/04 05:28:59 AeTu0vqB
逆文字でネストを表現するのはお手本となる言語があった気がする
331:login:Penguin
08/07/04 08:23:27 jR7hqKfT
プロセスをkillするシェルを作成しましたが、そのシェルそのものも引っかかってしまいます。
下記を実行すると、test のプロセスはKillされますが、
./kill_test.sh: line 6: kill: (17914) - No such process
と、エラーが出ちゃいます。
どのようにすれば、そのシェルそのものを検知しなくできますでしょうか。
例えば、test というプロセスをKillするプログラム
#!/bin/bash
# kill_test.sh
ID=ps axo pid,cmd | grep test | awk '{print $1}'`
if [ -n "$ID" ]; then
kill $ID
fi
実行結果
test のプロセスはKillされますが、エラーも出る
./kill_test.sh: line 6: kill: (17914) - No such process
332:login:Penguin
08/07/04 08:32:51 dZZeWoZr
>>331
pkill test
333:login:Penguin
08/07/04 08:55:04 jR7hqKfT
ありがとうございます。
プロセスはKillされますが こんどは Terminated と出ちゃいますが...
#!/bin/bash
# kill_test.sh
pkill test
334:login:Penguin
08/07/04 16:17:24 8eslOrWY
>>331
grep -v $$ とかやって
シェルスクリプトの pid を除く。
grep -v grep とか grep [t]est とかやって
grep の pid を除く。
335:login:Penguin
08/07/04 23:59:25 /fP/UZlP
most なんて初めて知ったよ。
URLリンク(www.jedsoft.org)
336:login:Penguin
08/07/05 05:45:46 zldIi++e
>>335
同じく
support multiple windowsの意味がわからんwww
337:331
08/07/05 08:21:10 f1ZF3ker
ps axo pid,cmd | grep test| grep -v ' grep' | awk '{print $1}'
で、できました。 m(._.*)mペコッ
pkill 知りませんでした。pgrepも知ることができ感謝です
338:login:Penguin
08/07/05 15:47:51 9A3h5Tdb
>>335
漏れも漏れも
can scroll left and rightの意味がわからん。
339:login:Penguin
08/07/05 16:46:32 QzBtt5r9
文字どおり左右にもスクロールできる、ってことじゃないのか
複数のファイルが見られるとか書いてあるし
URLリンク(www.slackbook.org)
340:login:Penguin
08/07/05 19:44:37 wIp47NAo
perlとかrubyとかpythonとかはシェルスクリプトよりも確かに優れてる面もたくさんあるけど、
classpathの設定とかで混乱する手間と暇を総合的に考えると、単純なシェルスクリプトの範囲内で
問題を解決する能力がある人のほうが貴重。
341:login:Penguin
08/07/06 00:07:36 H+bXS9E7
>>340
めんどいからさっさと結論を出すと、適材適所だな。
次の方どうぞ。
342:login:Penguin
08/07/06 00:17:49 KiLBqQPD
>>340
> classpathの設定とかで混乱する手間と暇
ちょっとまてw。perlとかrubyとかpython使ったことないだろ?
java男ご乱心。
343:login:Penguin
08/07/06 00:19:29 H+bXS9E7
>>342
例えばperlとかには@INCとかあるから、その辺のことを話したいんだろうと理解。
行間くらい読んでやれ。
344:login:Penguin
08/07/06 00:29:37 KiLBqQPD
>>343 行間読んでJython,Jrubyみたいな話かとおもた。あんなキモいもん認めん。
345:login:Penguin
08/07/06 00:31:39 fSJWsnfA
作るスクリプトが動かされる環境を予測できて,ちゃんと互換性をもたせる能力があればperlでもgnu依存でもなんでもいいよ.
346:login:Penguin
08/07/06 00:33:14 KiLBqQPD
それでもjavaライブラリ依存は認めない。
347:login:Penguin
08/07/06 20:32:11 Bp8Wp40b
テキスト処理について質問させてください
SQLを格納した以下のようなログファイルがあります。
select * from table1 where 名前='田中'
select * from table1 where 名前='佐藤' and 年齢 > 20
select * from table1 where 名前='鈴木'
これの条件部分('田中'とか'佐藤'の部分)を'*'に一括で変更する方法はありますか?
環境としてbash、awk、sedは使えますがperlは使えません。
よろしくお願いします
348:login:Penguin
08/07/06 21:12:08 9FSHXxTH
$sed "s/名前='.*'/名前='*'/g" hoge > foo
$mv foo hoge
349:login:Penguin
08/07/06 21:36:34 7sKhRIVr
>>348
$ sed -i "s/名前='.*'/名前='*'/g" hoge
350:login:Penguin
08/07/06 21:42:16 9FSHXxTH
そのオプションマニュアルに載ってないな、初めて知った勉強になりました
351:login:Penguin
08/07/06 22:12:09 ksmXqbT3
再起動(shutdown -r now)後、
数分後に指定シェルを起動させたいのですが、
何か良い方法ないでしょうか?
centos4で、
/etc/rc.local
に記述すると即時起動は可能なのですが、
時間指定ができないため悩んでおります。
再起動を行うのが一定時刻ではないので
atも使えません。
どなたかお助けくださいませ。
352:login:Penguin
08/07/06 22:14:33 fSYsy/u2
>>351
sleep
353:login:Penguin
08/07/06 22:21:54 WvrNzaWB
>>348-349
ありがとう
354:login:Penguin
08/07/06 22:28:07 fMUp8CRa
>>351
at now + 数 minutes
などと /etc/rc.local に書いたらどうだろう。
355:351
08/07/06 22:45:55 ksmXqbT3
>>352
>>354
サンクスコです!!
試してみます!!
356:login:Penguin
08/07/07 21:33:14 pcTeT086
uClinux2.6上のBusyBoxのmshというシェルで質問です。
BusyBoxのバージョンは以下です。
BusyBox v1.4.1 (2008-06-02 10:22:52 CST) Built-in shell (msh)
mshでループ処理をさせていると、いつのまにか
Shell input nested too deeply
というエラーになり、スクリプトのプロセスが死んでしまうのですが、
何か良いやり方はあるでしょうか。
やりたい事は、アプリケーションの裏方で、1秒毎にサーバに
pingを打つなどしてネットワークが見えているかを確認し、
通じないならリカバリをするポーリング処理です。
autorun.sh内からsrvwatch.sh &として起動しています。
srvwatch.sh
--------
#!/bin/sh
server=192.168.0.1
while [ 継続条件 ]
do
ping $server -c 1
if [ $? != 0 ]; then
# ( pingが通じない時の処理 )
fi
sleep 1
done
最悪、他のシェルが使えない事もないのですが、mshで解決できれば
それに越したことはないので、よろしくお願いします。
357:login:Penguin
08/07/07 21:34:48 2WJ5nXyr
>>356
キリの良いところで別のスクリプトにして子プロセスとして動かせば?
358:login:Penguin
08/07/07 21:44:55 pcTeT086
>>357
なるほど。
例えばアプリケーション内のループをトリガにできれば問題を回避できそうですね。
その方向で検討してみます。
359:login:Penguin
08/07/13 16:02:53 XKteJijz
quotaのedquotaだとテキスト形式でエディタで編集しなきゃいけないですが、
コマンドのみで指定ユーザを指定容量に変更、ってどうすればできるでしょうか?
360:login:Penguin
08/07/13 18:28:58 Ixz1lkH8
実は、ここは「シェルスクリプト総合」スレ。
361:login:Penguin
08/07/13 23:41:37 2nzKAI8F
a,1
a,2
b,3
c,1
d,15
d,1
d,1
e,3
こんな感じのファイルを、1カラム目でユニークにして、2カラム目は1カラム目の値ごとに合計を出したい
という場合なんですが、シェルではむずいですか?
a,3
b,3
c,1
d,17
e,3
この結果を求めてます
362:login:Penguin
08/07/14 00:16:50 pAKMtVeu
いいえ 容易です
363:login:Penguin
08/07/14 08:20:36 Nv/tP5Or
>>361
cutとsort、uniqでキーのリストを作る。
grepとcutでキーごとの値を得る。
それをexpr
364:login:Penguin
08/07/14 16:52:54 6AUtGr7x
>>361
awk 使えば~
365:login:Penguin
08/07/14 18:28:30 Mh/R7fAz
>>361
awk -F, '{dat[$1]+=$2}END{for(i in dat) print i","dat[i]}' hoge
366:login:Penguin
08/07/17 15:31:48 8xNJ++Yc
指定した変数の中に、ある文字列があれば~
という条件式、どのように書けばいいですか。
367:login:Penguin
08/07/17 15:59:24 RxW1jeOx
#!/bin/sh
hoge=$1
hogehoge=$2
if [ `echo $hoge | grep $hogehoge` ]; then
echo "$hogehoge exist in $hoge"
fi
exit 0
368:login:Penguin
08/07/17 16:09:53 RxW1jeOx
と思ったけど >>228 のほうがいいな
369:login:Penguin
08/07/17 20:02:22 8xNJ++Yc
>>367
ども
ですが、ひとつ質問です
たとえばhogeにunko is
hogehogeにu
とした場合、ちゃんと動かないですがこれはどう扱えばいいですか。
370:login:Penguin
08/07/17 20:35:02 IIv1XTjU
よろしくおねがいします
bkfile=$dest/$2.$timestamp.tar.gz
tar cpzf $bkfile $1 >/dev/null 2>&1
if [ $? != 0 -o ! -e $bkfile ];
ここのでの
if [ $? != 0 -o ! -e $bkfile ];
意味を教えて下さい、エロイヒト
371:login:Penguin
08/07/17 20:49:36 wB0Vu+2C
>>370
URLリンク(cyberam.dip.jp)
372:login:Penguin
08/07/17 21:05:28 6zoBsCIm
それも、変数に 'unko is' を入れられない糞スクリプトだね。
373:login:Penguin
08/07/17 21:10:39 IIv1XTjU
$? != 0 -o
は終了ステータス
! -e $bkfile
はファイルで無い場合
すなわち
終了ステータスがO以外、且つ、bkfileがファイルの場合
ということでok?
374:login:Penguin
08/07/17 21:14:48 ZrSZoUoY
>>372
unkoは入れるものじゃなくて出すものだからな
#/bin/sh
hoge=$1
hogehoge=$2
if [ "`echo $hoge | grep $hogehoge`" = "$hoge" ]; then
echo "$hogehoge exist in $hoge"
fi
375:login:Penguin
08/07/17 21:21:49 wB0Vu+2C
>>373
終了ステータスが0以外、もしくは、$bkfileファイルが存在しない場合
376:login:Penguin
08/07/17 21:27:09 IIv1XTjU
>>375thx
if [ $? != 0 -o ! -e $bkfile ];
[ $? != 0 ]且つ [-o ! -e $bkfile ]
-oの意味と
[ $? != 0 -o ! -e $bkfile ]; スクリプトの区切り方がわかんらんのですが・・・
面倒かけてスマソ
よろしくお願いします
377:login:Penguin
08/07/18 00:26:56 djfoTRoL
>>374
助かりましたどうもです。
378:login:Penguin
08/07/18 00:47:41 JinxhkI+
>>376
man test で -o を探せ。
379:login:Penguin
08/07/23 12:37:01 AKylUJRP
「あるディレクトリにAA.bbというファイルがなかったら
AA.ccというファイルを削除する」
これをどう書いたらいいか教えてください
380:login:Penguin
08/07/23 12:42:19 XuVewefN
[ ! -f AA.bb ]
rm AA.cc
381:login:Penguin
08/07/23 12:43:53 x1Crms/C
宿題は自分でやりなさい。
382:379
08/07/23 21:51:48 AKylUJRP
>>380
ありがとうございます!できました。
別件でもう一つ教えてください。
「m2eという拡張子のものをコンバート(m2t化)、成功したらm2eを削除する」
というスクリプトを書きました。
#!/bin/sh
for file in *.m2e
do
/usr/local/bin/b25 $file ${file%m2e}m2t
EXITCODE=$?
if [ 0! = $EXITCODE ]; then
rm -f $file
fi
done
m2eファイルは複数あるんですが、4行目でありったけのm2eを処理し終わらないと
5行目以降の処理に進まないようで、
m2eを削除することなくばんばんm2tができていきます。
これを、1ファイルごとの処理にするにはどこを変えたら良いでしょうか・・・?
383:login:Penguin
08/07/23 21:59:02 XuVewefN
>>382
>381
in `ls *.m2e`
384:login:Penguin
08/07/23 22:18:42 jePbQOfG
分からない時は変数を出力してみるといいよ!
385:login:Penguin
08/07/23 22:22:18 Ec8ZyKSx
終了判定の if文がおかしいから、rm行が実行されないのでは?
sh -x script
してデバッグしてちょ。
386:379
08/07/23 23:27:36 AKylUJRP
皆さんほんとありがとうございます。
sh -x すら知りませんでした。超便利ですねこれ…。
で、b25コマンドが成否に関わらず終了コード0を返していました。
成功したら1を返すだろうという先入観が敗因でした。
今日教わったことを踏まえ以下のとおりにしたら成功しました。
#!/bin/sh
for file in `ls *.m2e`
do
/usr/local/bin/b25 $file ${file%m2e}m2t
if [ -f ${file%m2e}m2t ]; then
echo complete
rm -f $file
else
echo fail
fi
done
初めて書くシェルスクリプトですが、おかげさまで思ったとおりできました。
どうもありがとうございました。
387:login:Penguin
08/07/23 23:30:38 bXJC8PaP
>>383
ls する必要あるか?
388:login:Penguin
08/07/23 23:31:06 HicxYVC5
>>386
蛇足かもしれんが、成功したときの終了コードは0だ。
389:login:Penguin
08/07/24 01:05:36 cIOzBtbq
空白を含んだファイル名の処理がおかしくなるので,ls しない方がベター。
元の
> for file in *.m2e
のままでよい。
>>382
= の否定は != ね。
! と = の間に空白を入れてはいけないよ。
390:login:Penguin
08/07/24 08:32:37 BJInmIaX
>>387-389
遅いよおまいら。
遅刻の罰として、5分毎にこのスレの新規書き込みをチェックするスクリプトを上げること。
bashの内部コマンド以外は使ってはいけません。
391:login:Penguin
08/07/24 10:40:03 jtU4rAt4
curlも使っちゃいかんのかい・・・
392:login:Penguin
08/07/24 20:20:13 Hhban5lk
あきまへん。bashのソケットで。
393:login:Penguin
08/07/24 22:02:07 pIyY20xI
wgetは認められるはず。
なんせ左手だけで入力できるんだぜ?
394:login:Penguin
08/07/24 23:00:05 yNUWiOQr
>>392
詳しくは知らないけど/dev/tcp/host/portじゃダメかな?
395:login:Penguin
08/07/25 08:02:37 5wHuLUjg
ええのではないでしょうか
bashでcurlを代替するには、それで双方向ソケットを実現するしか多分ないだろうから。
396:login:Penguin
08/07/30 16:48:07 JUVwIDuC
あるファイルの、ファイル名を先頭から10文字分取得してOSの変数に入れたいのですが
拡張子もない日時そのままのファイル名(080730151530 とか)なので
for文すら書けずにいます。
どう書いたらいいですかと聞ける段階にもないのですが、
こういったファイル名の扱い、前方一致のさせ方について
参考になりそうなサイトなどないでしょうか?
397:login:Penguin
08/07/30 17:37:14 8Rj3UHKM
まずは正規表現について学ばれるといいと思います
398:login:Penguin
08/07/30 17:47:11 sE7Hyt0D
#!/bin/sh
tmp="9999444422228888"
for file in ${tmp}; do
#先頭から8文字目まで切り出し
echo ${file} | cut -c 1-8;
done
プロトタイプつくって、色々試してみるといいかもよ
あとは、tmpをどのように持っていくか
find使いたかったら
tmp=`find -tpe f`
とかだろうし
色々やってるうちに、スペースが入ったファイル名とかで疑問もでてくるだろうし
399:login:Penguin
08/07/31 02:05:26 kxeNsmhd
目的のファイルがあるディレクトリで(そのディレクトリに cd して)
スクリプトを実行するという前提で、、、
for FILE in *
で、そのディレクトリにある隠しファイル以外のファイルの名前が順に変数 FILE に入る。
拡張子のあるなしは関係ない。
もし、日時そのままのファイル名(数字12文字のみからなる?)以外のファイルが
ディレクトリ内に存在する場合には、以下のような if 文で弾く。
if echo $FILE | grep '^[0-9]\{12\}$' > /dev/null
あとは>>398のを組み合わせて全体はこんな感じ。
#!/bin/sh
for FILE in *
do
if echo $FILE | grep '^[0-9]\{12\}$' > /dev/null
then
echo $FILE | cut -c 1-10
fi
done
400:login:Penguin
08/07/31 10:18:05 JpgVGgaY
そもそも CUI 環境の UNIX, Linux に拡張子という概念は無いと思われます。
401:login:Penguin
08/07/31 14:53:26 a31/vqCD
概念という言葉が適切かどうか。
402:login:Penguin
08/07/31 15:54:04 SAvKwoDD
kakutyou.c
403:login:Penguin
08/07/31 16:54:35 CDeZt19d
>CUI 環境の UNIX, Linux に拡張子
CUIと拡張子に何の関連があるんだ。
MS-DOS時代には拡張子が無かったという主張なのか。
404:login:Penguin
08/07/31 17:22:53 JpgVGgaY
>>403
文字通りの意味だよ
KDEなど使用したX環境では拡張子を判断してプログラム動作を変えるものが一部にあるからね
もう一度言うが、「文字通りの意味」だ
そんなに解らん日本語だったかね
405:login:Penguin
08/07/31 17:24:39 FFTlQwAQ
mailcapはあるけど
406:login:Penguin
08/07/31 17:26:02 +AWBOmCl
拡張子ではなく suffix だ、とかそういう話じゃなかったのか。
407:login:Penguin
08/07/31 17:29:51 6oedF87g
>>404
胸張って屁理屈言ってどうするかね。
大人気なく反例を提示するなら、CUIで動く代表的なプログラムであるgccは拡張子を見て呼ぶコンパイラを変えたりするが、見解を求む。
408:login:Penguin
08/07/31 17:35:59 JpgVGgaY
>>407
めんどい
409:login:Penguin
08/07/31 18:09:02 RztDzhJY
>>407
座布団あげる。
柔軟だというだけだよね。
410:login:Penguin
08/07/31 18:18:49 6oedF87g
gzipも拡張子見るなw
411:login:Penguin
08/07/31 18:21:00 9ySiTva1
make !! , make !!
412:login:Penguin
08/07/31 20:26:30 54icAPXL
ID:JpgVGgaY 恥ずかしいなw
全部言い返されてやんの
413:login:Penguin
08/07/31 22:03:49 zM7TOaQk
>>406
拡張子でなく接尾辞だという点には誰も異論だ無いんじゃないか。
>KDEなど使用したX環境では拡張子を判断してプログラム動作を変えるものが一部にあるからね
などと強弁してるのを皆に笑われているだけで。
414:login:Penguin
08/07/31 23:00:46 XBLFfbqE
hoge.gz.20080101 を gunzip しようとしたら怒られましたよ
415:login:Penguin
08/07/31 23:27:25 9ySiTva1
>>413
gcc も gunzip も manページの表現は接尾子でもsuffixでもなく、「拡張子」ですな。
416:login:Penguin
08/07/31 23:30:11 F09gGQyB
もう いじめはやめましょうw
417:login:Penguin
08/07/31 23:43:03 W0fu7NON
>>415
そら、まあ
C:\>gzip.exe -dc < hoge.gz > hoge
なんてときの .gz は拡張子だもの。
というか、実のところ「拡張子」という呼称が既に人口に膾炙してるから、そう表現してるんじゃないかな。
たぶん、>>406の言ってることはもっと厳格で、FAT(だっけ?)には8文字のファイル名と3文字の拡張子を入れる覧があるが、inodeにはファイル名覧しか無いといったことだと思うよ。
あっと、俺は ID:JpgVGgaY ではないよ。話をたどれば分かると思うが。
418:login:Penguin
08/07/31 23:50:25 9ySiTva1
>>417
>>417≠ ID:JpgVGgaYは了解しています。直接レスつけるのは忍びなかったので。
あとsuffixつーとドメインネーム則なんかのジャンルも含む気がして
ちょっと拡張子とはニュアンスが違うと思いました。
419:login:Penguin
08/08/01 00:09:05 Z+D1IjNX
>>415
suffix って表現もあるじゃん。
extension と混在してる。
420:login:Penguin
08/08/01 07:18:11 K/umwhS+
まぁまぁ、404のオモシロ発言でもたどって和んで。
>>400
そもそも CUI 環境の UNIX, Linux に拡張子という概念は無いと思われます。
>>403
>CUI 環境の UNIX, Linux に拡張子
CUIと拡張子に何の関連があるんだ。
MS-DOS時代には拡張子が無かったという主張なのか。
>>404
>>403
文字通りの意味だよ
KDEなど使用したX環境では拡張子を判断してプログラム動作を変えるものが一部にあるからね
421:login:Penguin
08/08/01 09:33:44 9ncfYug9
人口に膾炙←読めない
422:login:Penguin
08/08/03 20:26:52 z2v8StjQ
ループか?
ループスレなのか?うひょーーーーーーーーーー
423:login:Penguin
08/08/05 09:41:49 GjmRcMaB
拡張子はファイル名の接尾辞として使われるっていう、ただそれだけの話。
424:login:Penguin
08/08/05 11:31:30 P4vieYD2
*.bak と *~ で見た目は違うが用途はほぼ同じなんだけど
*.1 *.2 … はlogとmanで意味合いが変わるもんな
425:login:Penguin
08/08/10 15:12:11 3WlJmUth
bash の配列の話です。
添え字を付けて定義すれば要素がかけた配列を作れますよね?
x=(a b c)
x[4]=e
x[6]=g
こんな風に定義すると要素の数 ${#x[@]} は 5 を返しますが
実際には x[6] まで定義されているわけです。
こういう歯抜けの配列から添え字と要素をセットで全て取り出す方法
何かありませんか?
for i in ${x[@]} ; do echo $i ...
だと添え字がわかりません。
for (( i=0 ; i < ${#x[@]} ; i++ )) ; do echo ${x[i]} ...
だとかけた部分に対応できません。
bash の配列処理が貧弱なのは知っていますが
何か知恵がありそうな気もするんです。
426:login:Penguin
08/08/10 16:39:06 YtTqhIm8
>こんな風に定義すると要素の数 ${#x[@]} は 5 を返しますが
うちでは 6 になる。
$ set
x=(a b c e '' g)
なので、
x[5]が空だからきっと代入されなかったんだろう
という判断しか思い付かない。
427:426
08/08/10 19:20:40 OrrhkboJ
読み返すと我ながらバカな日本語でイヤになった。式で書く
for ((i=1; i <= ${#x[@]}; i++))
do
if [ "${x[i]}" != "" ]; then echo "$i ${x[i]}"
という判断文を付け加えることぐらいしか思い付かない。
428:login:Penguin
08/08/10 21:22:42 3WlJmUth
>>426
>> こんな風に定義すると要素の数 ${#x[@]} は 5 を返しますが
> うちでは 6 になる。
あれ?自分の環境 (bash 2.05b @ debian) では 5 なんだけどな。
そちらの環境を教えてくれますか?
429:login:Penguin
08/08/10 21:51:14 uOwkyJaM
あ、ごめん。zsh でやっていた。
bash で set すると、
$ set
x=([0]="a" [1]="b" [2]="c" [4]="e" [6]="g")
で、添え字と要素がセットでズバり出るじゃないですか。
430:login:Penguin
08/08/10 23:04:19 3WlJmUth
>>429
ああ、そうでした。確かに表示されますね。
[] とか = とか変な文字が要素に入らないという前提なら
そこから添え字のみを取り出せればいけそうですね。
431:login:Penguin
08/08/14 21:23:54 6SkumsSk
基本的なことで、すいまん
bashで、たとえば
# login : root
# passwd : foo
なんて場合、シェルからの問い合わせに対して、スクリプト側で
rootやfooを自動的に入力したいのですが、どのように書いたらいいのでしょうか?
432:login:Penguin
08/08/14 21:24:45 6SkumsSk
BATU 基本的なことで、すいまん
MARU 基本的なことで、すいません
433:login:Penguin
08/08/14 21:44:42 Q5H0d7m9
>>431
expect
434:login:Penguin
08/08/14 21:52:17 6SkumsSk
>>433
イクスペクトですか、ありがとう
435:login:Penguin
08/08/17 13:04:54 id1iDBNz
>>433
bashで
436:login:Penguin
08/08/18 22:17:27 P4gPyZDt
グループ sumo が存在するか? を調べる方法が思いつかない。
ユーザ hakuho の存在を調べるのは、
id hakuho
などとやろうと思うが、グループの方をhelp!!
grep /etc/group はやりたくない。
437:login:Penguin
08/08/18 23:25:02 Wi4hQzW9
>>436
くだらねえ質問はここに書き込め! Part166
スレリンク(linux板)
438:login:Penguin
08/08/18 23:35:20 tdXNnNro
LANG=C chgrp hakuho / 2>&1 | grep -q '^chgro: invalid group' || echo ok
439:login:Penguin
08/08/19 08:01:52 GbBy+Szp
chgrpされたら困るやん。
440:login:Penguin
08/08/19 08:17:46 yV2lM3C5
root じゃなきゃ大丈夫でしょ。
441:login:Penguin
08/08/19 11:14:23 i/uDMj66
んな罠みたいなスクリプトはちょっと。
442:login:Penguin
08/08/19 11:19:47 yV2lM3C5
他に思いつかないんだよな。
素直に /etc/group を grep するのが一番だと思う。
443:login:Penguin
08/08/19 11:30:56 Z4idUwk9
grep /etc/group はやりたくないそうだから仕方ない
444:login:Penguin
08/08/19 11:31:37 yV2lM3C5
NIS とか LDAP とか使ってるなら
perl あたりで getgrnam とか。
445:login:Penguin
08/08/19 22:33:06 /3aOZv4D
NISもLDAPも使ってないが、これは良いかもしれない。ありがとう。
$ perl -e '($n, $p, $g, $m) = getgrnam 'lp'; printf "%s\n", $g'
7
446:login:Penguin
08/08/21 00:34:13 uS1Qpazh
bash使ってるのですが
lsすると何も返ってこないです
set +mするとかえってきます
何が悪いのかさっぱりわかりません
447:login:Penguin
08/08/21 02:06:11 hLnB3a+h
>>446
type ls するとどう出る?
448:login:Penguin
08/08/25 22:22:20 q8+dK05f
echo $"Starting XXXX daemon..."
という一文の「$」の意味を解しかねてるんだども…
449:login:Penguin
08/08/25 22:30:19 TaEIkWlk
% echo $"Starting XXXX daemon..."
$Starting XXXX daemon...
% echo "$Starting XXXX daemon..."
XXXX daemon...
%
450:login:Penguin
08/08/25 22:34:16 i+OsnagO
>>448
ja.po とか作るときに
$" " で囲んだところが
翻訳の対象として切り出される。
メッセージ カタログ化
とかでググれ。
451:login:Penguin
08/08/25 23:32:42 w1+LX6rA
これすか…
bash(1)
> --dump-po-strings
> Equivalent to -D, but the output is in the GNU gettext po (portable object) file format.
試しに /usr/share/locale/ja/LC_MESSAGES/XXXX.mo を作ってみたが、日本語にならない。
あうあう。。。
「$」はぶった切ることにします。
452:login:Penguin
08/08/25 23:49:02 i+OsnagO
>>451
急ぎじゃなかったら少し頑張ってみるといいかも。
前作ったもの見たらこんな感じで作業してたらしい。
$ xgettext -o hoge.po hoge.sh
$ gtranslator hoge.po
$ msgfmt -o hoge.mo hoge.po
hoge.sh の中にはこんなのが書いてあった。-->
if [ -z "$TEXTDOMAIN" ] ; then
TEXTDOMAIN="hoge"
TEXTDOMAINDIR="/usr/share/locale"
fi
<--
TEXTDOMAIN="hoge.sh" じゃなくて
TEXTDOMAIN="hoge" にしてあるのは
hoge.sh をインストール時に /usr/bin/hoge に改名(hoge.sh から hoge に)するため。
453:login:Penguin
08/08/26 23:01:28 JsSv3XDz
gtranslator てのが無かったので、
$ sh --dump-po-strings XXXX > ~/XXXX.po
とし、msgfmt 以降同様にすると日本語になりました。
どうもありがとう。
454:login:Penguin
08/08/31 15:42:27 aoYJcwTK
?$
455:login:Penguin
08/09/01 09:58:54 LEXE4Xrt
C言語でいう
for (float a=0.1;a<1.5;a+=0.1){
}
の様なループはどのように書けばよいのでしょうか?
456:login:Penguin
08/09/01 10:38:54 zLmvj5ED
>>455
小数とか使いたいなら
もっとまともな言語使った方がいいよ。
457:login:Penguin
08/09/01 12:17:57 qt+GSvTX
for i in `seq 1 20`
do
i=`echo "scale=1; $i / 10" | bc`
echo $i
done
458:login:Penguin
08/09/01 17:56:42 gt+0kg/y
やっぱループ変数は整数だよな。
少数は気持ち悪い。
459:login:Penguin
08/09/01 23:52:23 yMJ8hMF5
$ cat aso
killall fukuda
460:login:Penguin
08/09/02 01:01:15 iTMiNYXN
>>458
気持ち悪いどころか、有害。
for(float a=0;a<=1.0;a+=0.1){printf("%g ",a);}
⇒ 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9
461:login:Penguin
08/09/02 02:16:22 NrY9TL/o
>>460
勉強になります。
使った事ないし、使う場合はテストするのでだいじょぶだけど。
でも絶対やらんよねw Cやってるやつは。
すれち
462:login:Penguin
08/09/02 04:38:59 dzMMfnry
bcで計算させたとき、0以下の小数は最初の0を抜いた.2のように表示されますが、
0.2の様な表示にはできませんか?
463:login:Penguin
08/09/02 09:52:47 bHR8SDTE
0 ≧ .2 なのか。
464:login:Penguin
08/09/03 00:04:05 aqC4nv+U
>>463
浮動小数点の比較を工夫なく行う奴はアホ。
465:login:Penguin
08/09/05 21:49:46 eUOT1mPo
sed を | で つなぐんじゃだめ?
466:login:Penguin
08/09/06 00:00:19 x4tIq2Vd
#!/bin/sh
echo '%A4%A2' | tr % = | nkf -emQ
「あ」と表示させたいのですが、「、」」と表示されてしまいます。
正しい書き方を教えてください。
467:login:Penguin
08/09/06 05:03:55 /FPWBzOe
うち(EUC環境)では「あ」と表示される。
468:login:Penguin
08/09/06 08:59:05 6Sr65r/p
>>466
テキストに落とすとEUCで「あ」に見える
469:login:Penguin
08/09/06 23:40:32 O24UR7Eo
>>466 の環境がUTF-8なら
#!/bin/sh
echo '%A4%A2' | tr % = | nkf -wmQ
470:login:Penguin
08/09/08 22:09:56 tYV0ghqH
引数 output-file input-file1 input-file2 ...
を受け取ってinput-fileN に some-dir/ を付加したコマンド引数を他のプログラムの引数として与えたいのです。
つまり、
foo yaruo.out vip.txt vipper.txt vippest.txt
でfooを実行して、そのfoo内では
bar yaruo.out www/vip.txt www/vipper.txt www/vippest.txt
を実行するということがしたいのです。
こんなスクリプトを作成するには、fooをどのように記述すればいいのでしょうか。
よろしくお願いします。
471:login:Penguin
08/09/08 22:27:43 UFg0tXoN
もう宿題の季節なのか?一箇所直してから使ってくれ。
#!/bin/bash
org=www; ARG1=${1}; shift; echo bar ${ARG1} ${@/#/${org}/}
472:login:Penguin
08/09/08 22:50:15 4IH3dQd+
>>470
あのね、
宿題を出す先生は、このスレもチェックしてるからね、
>>471 のを出しても 0 点だからwww
ゆっくり 0 点にしてってね!
473:login:Penguin
08/09/08 22:54:09 tYV0ghqH
>>471
残念ながら宿題ではないのです~
ありがとうございました。
474:login:Penguin
08/09/08 23:03:49 QeMmaTeA
うちの大学の先生はプログラム板も見ていた
475:login:Penguin
08/09/08 23:09:05 /XLojU6V
先生も激務だな
476:login:Penguin
08/09/08 23:45:08 lCRZh05X
悪いな、おいらは数学板だけでなく、
日本語のあらゆる数学質問掲示板を巡回している。
必ず学生が質問をしやがるから。
レポートを返すときに、そのスレおよび掲示板のコピーを添付して、念のため確認をとる。
初めから正直に引用したと書いてあるものについては、改めて口頭で説明させている。
477:login:Penguin
08/09/09 08:43:21 7p63VvoV
院生にやらせそうな案件だな
478:login:Penguin
08/09/11 23:43:43 6JSrg1Nn
実際に教授がやってたら笑いものだな。
そこまで熱心にありがとうございます、と学生ながらに思うべきか。
ただ、ねぇ・・・
479:login:Penguin
08/09/12 01:07:51 Hfrl7+Fx
>>478
いや、日本だけってわけでなく海外でも今や引用元チェックとか行っているよ。
480:login:Penguin
08/09/12 18:08:43 9WCeRGBW
へー
481:login:Penguin
08/09/12 21:11:04 lKrrIxw4
3年前ほどにアメリカのテレビドラマで高校の先生がエッセイの宿題を返す場面を見た。
ある学生に返しながら、「素晴らしいエッセイだったわ。 essay.com(のような感じ)ね?
月曜までに自分で書いて来てね」
482:login:Penguin
08/09/13 02:57:01 +1Gk57wR
問題も自分で作ってね
483:login:Penguin
08/09/19 18:18:28 0H1973GE
>>479
手作業じゃないよね。日本語を解析できるツールはまだできてないよ。
484:login:Penguin
08/09/25 00:19:59 t0y6Jov+
fdisk /dev/sdb
n
p
1
w
↑こんな感じで、入力させていきたいのですが、
方法がわかりません。キーボード 入力 シェル スクリプト
あたりでぐぐると、キーボードからの入力を受け付ける、しか見つかりませんでした。
方法を教えてください。
485:login:Penguin
08/09/25 01:43:59 Khd+tIc7
>>484
expect
486:login:Penguin
08/09/25 09:57:28 fRZ/kmS9
>>484
sfdisk
487:login:Penguin
08/09/25 19:47:43 wpIij73K
>>484
>> EOF
488:login:Penguin
08/09/25 19:55:28 oa1dgrD9
( echo n; echo p; echo 1; echo w ) | fdisk /dev/sdb
入力が端末かどうかちゃんとチェックしてるようなモノだと動かないが、
fdisk はそんなことしてなかったはずなので、ふつーに標準入力からつっこめばよし。
489:login:Penguin
08/09/27 00:45:11 9WMmgXah
ゴミ箱スクリプト使ってるひといる?
490:login:Penguin
08/09/27 01:12:09 s/QKRkEt
あい。
491:login:Penguin
08/09/28 03:42:58 yjLf4XT+
ゴミ箱に入ってるファイルを復元させるやつなら使ってる
492:login:Penguin
08/09/29 04:13:28 nMbRNXLX
ティルダ(~)展開について質問。
#!/bin/bash
ls ~/
directory="~/"
ls $directory
上側のように直接書いたものは展開されますが、下側のように変数に入れたものは展開されません。
変数に入った「~」を展開するにはどうすればいいのでしょうか。
493:login:Penguin
08/09/29 04:17:44 dNtmh/2+
directory=~/
494:492
08/09/29 08:48:30 dqlgrzbc
うわ、そんなことだったのか。ありがとうございます。
では、read directory; などでファイルから読んだ場合はどうすればいいんでしょう。
495:492
08/09/29 10:56:52 dqlgrzbc
あ、わかりました。eval 使えばいいんですね。
ファイルからティルダ(チルダ)含んだパスを読み込むことなんかよくあると思うんだけど、
そういったシチュエーションでの展開は解説されてませんねえ。
基本的な展開の話ばかりで。
496:login:Penguin
08/09/29 11:06:17 6KBzfDQe
eval
って書こうとしたら自己解決してたか。
>ファイルからティルダ(チルダ)含んだパスを読み込むこと
俺は経験無いけど、良くあることなの?
497:login:Penguin
08/09/29 12:14:07 PrjYZQYT
> 俺は経験無いけど、良くあることなの?
んー、俺もそもそもスクリプトはあんまり書かないんだけど、
ちょっと今回必要があって、とあるファイルにつらつらと書かれたパスに対して
順番に処理かけていくスクリプトを組んだ。
よくあるかと思ったのは単なる想像。使ったスクリプトが悪かったかな?
498:login:Penguin
08/09/29 12:15:02 PrjYZQYT
アレ、ID 変わってる。
>>495 です。
499:login:Penguin
08/09/29 13:09:37 M1tw2hRO
むしろ勝手に解釈されたら困ることの方が多そう。
500:login:Penguin
08/09/29 17:00:59 DE65cKXI
$HOMEの方がいいと思う
501:login:Penguin
08/10/14 23:13:02 IUh0ZsYq
16進数がずらーっと並んでいるテキストファイルを手で入力しています。
手入力なのでうっかり16進数の[0-9a-f]以外の文字がはいってしまうこと
があるのですが、「このファイルには[0-9a-f]以外がはいってる」ということ
を検出するいい方法はないでしょうか。
502:login:Penguin
08/10/14 23:18:11 peqExbxa
とりあえず grep -v '[0-9a-f]' みたいな
503:login:Penguin
08/10/14 23:55:57 VVRxoluk
>>501
なつかしい作業だね。
いまどき、そんな事やるひつようあるの?
504:login:Penguin
08/10/15 01:23:45 oM4m5G9h
>>502
試してから書けよ。
$ echo 00 | grep -v '[0-9a-f]'
$ echo 0x | grep -v '[0-9a-f]'
505:login:Penguin
08/10/15 01:26:34 YCs9R2r/
grep '[^0-9a-f]' ですね、失礼しました
506:login:Penguin
08/10/15 01:34:48 IbpEXu/h
[ x"$hoge" = "x" ]というようなのをたまに見かけるんだけど
[ "$hoge" = "" ]となにがちがうの?
507:login:Penguin
08/10/15 01:46:00 Z5rHmxLW
>>506
- で始まる文字列返されると困るから。
508:login:Penguin
08/10/15 02:11:39 IbpEXu/h
なるほど、どうも
509:login:Penguin
08/10/15 21:42:29 bOOa1s77
>>502-505
ありがとう。シンプルでそれでよかったんだね。なんか考えすぎてたらしい。
>>503
大昔のパソコン雑誌を押入れから発掘したんです。
そこにあったのは16進ダンプファイルで掲載されていたゲーム・・・。
そして、入力して動かそうとしてあーだこーだやっているうちに
「16進数テキストファイルの処理」が目的になってるという状態w
510:login:Penguin
08/10/16 08:22:19 tCBPvnpY
シェルの操作とかってそうやって覚えるもんだよねー
懐かしさに惹かれておいらも引っ張り出してみようかしら
511:login:Penguin
08/10/17 01:32:36 6ubwN3MV
>>>503
>大昔のパソコン雑誌を押入れから発掘したんです。
>そこにあったのは16進ダンプファイルで掲載されていたゲーム
>・・・。
やっぱりw
なつかしすぎる。てか、bit数が違うから動かない予感
512:login:Penguin
08/10/17 11:08:59 4pVt9n9N
携帯やデジカメでダンプリストを取り込んでocrソフトでテキスト化
エディタで編集修正したものをデバッガへ食わせるなんてスレ違い
513:login:Penguin
08/10/22 20:50:34 VC8ljHmq
$ cat love.sh
what=LOVE
echo "ALL YOU NEED IS $what"
というファイルを改変することなく、2行目のecho文で
"ALL YOU NEED IS CASH" と出力することは可能だろうか?
$ cat cash.sh
declare -r what=CASH
source ./love.sh
というのを考えてみたが実現できなかった。
514:login:Penguin
08/10/22 21:16:44 l3U9XvVs
$ sed s/LOVE/CASH/ love.sh | sh
これだと改変になる?
515:login:Penguin
08/10/22 22:28:26 VC8ljHmq
あーなるほど。いただきます。
516:login:Penguin
08/10/22 23:35:12 xR/eB2K4
what=MONEY;echo '#'`cat a.sh` | sh
517:login:Penguin
08/10/23 19:09:43 +CTFy1at
質問なんですが、atコマンドなどのログを取得して
特定のディレクトリーに吐き出すスクリプトを作成したいと思っています。
しかし、PHPやCなどはかなり触っているのでわかるのですが
シェルスクリプトは全くの初心者のため、どのようにしたらいいのか見当がつきません。
簡単な例でけっこうですので、教えていただけないでしょうか。
サーバー:CentOS5.2
518:login:Penguin
08/10/23 19:41:07 ueeORYHp
え、丸投げ!?
519:login:Penguin
08/10/23 20:18:32 y4uaRh/4
Cで書きゃええではないか。
520:login:Penguin
08/10/24 10:02:49 2zYy9Dkj
>簡単な例でけっこうですので
grep 'atコマンドなど' /var/log/messages > /tmp/hoge
521:login:Penguin
08/10/24 20:25:05 14T+pOpU
>>517
/etc/syslog.conf
とか?
外してたらごめん
522:login:Penguin
08/11/02 21:57:45 AykxzKW2
シェルスクリプト関連の本って今では結構いろいろ出てるけど、どれがいいんだろう?
シェルって何?って人に最適な本もあるだろうし、実務でスクリプトを書く人に最適な本もあるはず。
523:login:Penguin
08/11/02 22:12:17 XwJU1nJV
>>522
Advanced Bash-Scripting Guide
URLリンク(tldp.org)
524:login:Penguin
08/11/02 22:51:26 AykxzKW2
>>523
な、なにこれスゲー。今悩んでる問題が二つ解消した。たった数分読んだだけで。
525:login:Penguin
08/11/03 00:18:52 iKa/7Y2g
その2つを語ってみたまい。
「そんなことで悩んでいたのかクソ馬鹿」と罵倒してあげるから。
…いえ、ウソです。
526:login:Penguin
08/11/03 01:46:09 jQDIWjiF
板違いだったらごめんなさい
なぜ find には -exec があるんですか?パイプ
では駄目?
527:login:Penguin
08/11/03 02:48:26 bJlJMSV4
#スレ違いと思うけど、それは置いて。
findに-print0が無かった頃、
find ... -print | xargs rm
としたら思わぬ結果になり、
find ... -exec rm {}\;
と習慣づけるようにしたような、淡い記憶がある。
記憶違いかもしれないけれど。
528:login:Penguin
08/11/03 11:40:47 +Mz0PYlF
>>526
一個一個に対してコマンドを実行したいとき。
whileとreadで回すほどでもないときに使う。
xargsはなんかそんな気分の時に使う。
529:login:Penguin
08/11/04 00:03:44 28eBvx3Z
xargs rm だと一個一個消す訳じゃないらしいけど
その理屈がようわからん
どうやってんの?
530:login:Penguin
08/11/04 01:51:16 lE3PYV5Z
URLリンク(x68000.q-e-d.net)
531:login:Penguin
08/11/04 06:42:20 n6LEGgbQ
>>529
xargsの場合
rm a b c d
-execの場合
rm a
rm b
rm c
rm d
532:login:Penguin
08/11/04 18:22:21 IOim9jxY
だから、findでは -delete 使うか、末尾を\+にする。
533:login:Penguin
08/11/04 20:33:27 gko7k3GT
「だから」って…
「findに-print0が無かった頃」と予めことわっているのに、
やはり無かった"-delete"とかを持ち出されても。
534:login:Penguin
08/11/04 21:23:41 W3AqIadF
-deleteなんてあったんだorz。 使い古したコマンドでも時々manを見るべきだな。
535:login:Penguin
08/11/08 01:22:38 /AB41I5S
どなたかご教授ください。
以下のような形式のログファイル(test.log)の処理を行っています。
# cat test.log
日付 ・・・・必要な情報①・・・・・・・必要な情報②・・・・・・・・・
日付 ・・・・・・・・・・必要な情報①・・・・・・・・必要な情報②・・・・・
※「・・・」には、ログのその他、不要な情報が入っています。
このtest.logの中で、1,2行目の必要な情報①と必要な情報②のみを
抜き出して、別ファイルに保存したいです。
■保存したい例
必要な情報① 必要な情報②
必要な情報① 必要な情報②
awkを使おうと思ってたのですが、必要な情報の列(位置)が、
ログの行によって、まちまちでawkで処理する事が出来ません。
この「必要な情報」については、目印となる文字列が含まれているのですが、
grepのようなコマンドで、検索キーワードが含まれる行を抜き出すのではなく、
検索キーワードの該当する文字列そのものを抜き出すような方法は無いでしょうか。
分かりにくい説明で申し訳ありません。アドバイス頂ければと思います。
bashが良いのですが、他のシェルでも方法がありましたら、ご教授ください。
536:login:Penguin
08/11/08 02:20:54 Sn/dZhVJ
^[^キーワード]*,と,[*キーワード]*$ をsedとかで消しちゃえばいいんじゃない?
537:login:Penguin
08/11/08 08:26:09 spq9OVhg
「・・・」と略されたら、必要な情報と不要な情報の区切が解らへん。
538:login:Penguin
08/11/08 10:43:36 QmgRkUw9
awk を使うのなら、たとえば、こういうデータに対して
aaa word1 bbb word2 ccc
ddd word3 eee word4 fff
zzz yyy xxx
word5 ggg hhh iii
#!/usr/bin/awk -f
{
line = ""
for (i = 1; i<=NF; i++) {
if ($i ~ /word/) {
line = line "\t" $i
}
}
sub(/^\t/, "", line)
if (line != ""){
print line
}
}
というのはどう? 改良の余地は大いにあると思うけれど。
539:login:Penguin
08/11/09 00:42:41 +8LPtwQh
bashでの配列について教えてください
ファイルの内容を1行づつ読み込んで、変数に格納するには
どうすれば良いでしょうか。
540:login:Penguin
08/11/09 00:53:45 WldBda9P
つ while read i; do echo $i; done < file
つ IFS='
'
FILE=(`cat /etc/passwd`)
echo ${FILE[21]}
541:login:Penguin
08/11/09 01:04:17 +8LPtwQh
>>540
ありがとうございました!
こちらのほう、使わせて頂きます。
FILE=(`cat /etc/passwd`)
echo ${FILE[21]}
542:login:Penguin
08/11/10 00:15:54 ZSdeBKA2
read
543:login:Penguin
08/11/10 00:35:00 KJ/5CLnz
複数ディレクトリにある重複して存在してるファイルをリストアップしたいんですけど
(同じ名前とは限らない)
find dirA dirB dirC -exec cksum {} \;
でチェックサムを出したところまではいいんだけど
この値が一致してたらリスト出力するってのはどうすればいいでしょう?
544:login:Penguin
08/11/10 07:43:00 J2OShanR
一致行の出力でよければ、
$ find ... | sort | uniq -OPTION
何かオプションが要るような気がするので、uniq(1)を見て。
545:login:Penguin
08/11/10 12:58:27 25jIkch2
>>535
awkでできないことなんかないよw
処理速度はきついが
普通に 【必要な情報】で検索すればいいだろ?列なんか関係なしに。
546:login:Penguin
08/11/10 19:22:12 zHbtNtaX
>>543
なんかいまいち
find "$@" -type f -exec cksum \{\} \; | sort -k 1,2 | \
awk '{
if (c == $1 && s == $2) {
print l, $0; l = "";
} else {
c = $1; s = $2; l = $0 "\n"
}
}'
547:login:Penguin
08/11/10 19:28:01 K/Z638b2
前スレの683-に出てたので参考までに
548:login:Penguin
08/11/10 20:17:51 TV5/2e6C
>>535
sed 正規表現 置換 パターンマッチ(\1 \2とか) ?
549:login:Penguin
08/11/10 20:21:36 TV5/2e6C
>>543
uniqは-wと-dが肝
あとfindには-type fも
550:login:Penguin
08/11/11 00:28:16 aoTr0xeG
重複ファイルのリストアップ、まだやってたのか。
ほれ。
つ find a b -type f | xargs md5sum | sort | uniq -D -w 32
551:login:Penguin
08/11/11 08:00:53 bvC0wffI
いや、もうやっていない。10日が〆切だった。残念。
552:login:Penguin
08/11/11 21:21:58 sJWsKHcQ
出力結果をテキストに書き出す時、複数行あるものを一行にまとめるにはどうすればいいですか?
553:login:Penguin
08/11/11 21:25:37 Skn7DdSq
>>552
改行を削除する
554:login:Penguin
08/11/11 21:44:28 sJWsKHcQ
削除のためのコマンドが知りたいです。
trで改行を空白に置き換えるのはダメでした。
555:login:Penguin
08/11/11 21:44:56 CoD3HoI5
個人的によくやるのは、
command | gawk '{printf("%s",$0)}'
556:login:Penguin
08/11/11 22:05:38 mJ48vZc0
tr -d じゃダメなの?
557:login:Penguin
08/11/11 22:05:59 sJWsKHcQ
ありがとうございます
試してみます
558:login:Penguin
08/11/11 23:38:49 et4tOJwy
cat hoge | tr -d "\n" > piyo
こんなんで どうでしょうか
559:login:Penguin
08/11/12 00:24:39 xwzZIHRk
linuxのcrontab なスレが見つからなかったのでここで質問させてください
Debian なのですが、
例えば 午前8時から18時まで20分おきにあるスクリプト(get-data.sh)を起動したいのですが
/etc/cron.d/get-data.sh
を用意して、
*/20 8-18 * * * oreore /usr/local/get-data.sh
というエントリを登録したのですが、実行されません。
*/20 * * * * oreore /usr/local/get-data.sh
だと20分おきに実行されます。
前者の記述はどこがおかしくて実行されないんでしょうか?
560:login:Penguin
08/11/12 00:39:11 eUoTfImJ
記述はあってるけど、get-data.sh ってほんとはどこにおいてるの?
561:login:Penguin
08/11/12 00:54:56 81ljxwzq
>>559
レンジ指定を時と分で両方やるってかち合っちゃうんじゃないかな? 恐らく
0,20,40 8-18 * * * oreore /usr/loca/get-data.sh
は出来るはず。
562:login:Penguin
08/11/22 15:37:29 qj5ispiW
cygwin環境なんですが
P=00010001
Q=`expr length $P`
R=`echo "32-$Q"|bc -l`
for i in `seq $R`
do
P="0"`echo $P`
done
echo $P
不細工ですが、二進数の桁をそろえるスクリプトを書こうとしています
実行したところ、seq: invalid floating point argynebt 24 というエラーが出てしまいます
bcの計算結果が整数として代入されず、seqの引数として不適当という事じゃないかな、と考えてるのですが
じゃあどうしたらいいのか?とmanを読んでもさっぱり解りません
どなたか教えてください
563:login:Penguin
08/11/22 15:47:57 XCvIqY7p
>>562
cygwin 使ってないから外してるかもしれんけど、
> R=`echo "32-$Q"|bc -l`
>
> for i in `seq $R`
> 実行したところ、seq: invalid floating point argynebt 24 というエラーが出てしまいます
$R に変な改行コードまで入ってるんじゃないの?
564:login:Penguin
08/11/22 17:33:09 8Embcy7k
質問から外れるが、わしなら、
perl -e 'printf("%032b\n", 0b10001 )'
とかで済ましてしまう気がする。
565:login:Penguin
08/11/22 17:36:52 lvsMYtv2
>>562
こっちのLinuxやCygwinは正常に実行できるよ
ただ双方の環境とも
$ seq "24 "
って末尾にスペースくっつけてやると
seq: invalid floating point argument: 24
ってなるよ
もしかして後ろに何かくっついてる?
# 敢えてロジック書くのは、勉強の為のシェルスクリプトかな
566:login:Penguin
08/11/22 18:38:22 qj5ispiW
>>563>>562
試行錯誤しているうちに実行できました
>$ seq "24 "
>って末尾にスペースくっつけてやると
ご指摘の通り、やはり余計な文字が入っていたのが原因のようでした
よく解らないのですが、バッククォート部分にスペースが入り込んでいたのが悪かったかな…?
>>565>>564
>質問から外れるが
># 敢えてロジック書くのは、勉強の為のシェルスクリプトかな
一応目的があってやっていることなのですが、いちいち調べて勉強しないことには
前に進めない状態です…
正直調べる事に疲れてしまって、目的を遂げられるならもう何でもいいのですが…
567:login:Penguin
08/11/22 18:39:59 qj5ispiW
肝心のお礼を忘れてしまいました
>>563->>565
ありがとうございました
これで何とか一歩前進です
568:login:Penguin
08/11/23 01:16:33 ahm0Z7lP
Cygwin は Linux じゃねーよ。
569:login:Penguin
08/11/24 11:45:40 qXSmazjs
echoでシングルコートで囲まれた文字列の中に、シングルコートとダブルコートを含ませた文字列を指定したいんだが、
以下のようになってしまう。
$ echo 'hello'"hello'
>
エスケープしてもだめだったんだが、どうすればいいんでしょうか?
570:login:Penguin
08/11/24 11:48:58 Ut9dLgFH
$ echo "hello'\"hello"
hello'"hello
571:login:Penguin
08/11/24 12:27:14 lGu01kSy
悪のりしたる。
$ echo 'hello\047\042hello'
hello'"hello
572:>>569
08/11/24 14:10:49 qXSmazjs
>>570
ありがとう!
ちなみに、あえてシングルコートで文字列を囲みたい場合は、どうすればいいんですか?
やっぱできませんかねぇ、、、
573:login:Penguin
08/11/24 14:11:33 O/sQuX/l
>>569
ダブルクオートを閉じてないから,続きの入力を求められてる。
シングルクオートの中ではエスケープできないから,
シングルクオートを表示したかったら,ダブルクオートで囲むしかないね。
574:login:Penguin
08/11/24 14:16:50 qXSmazjs
>>573
へー、ためになります。
575:login:Penguin
08/11/24 14:42:30 UgOcYWXS
>>572
こうゆうことか?
$ echo 'hello'\''"hello'
hello'"hello
576:login:Penguin
08/11/24 15:29:36 WL2QfG05
>>575
シングルクォートの外じゃん。
577:login:Penguin
08/11/25 01:20:38 r0vzabBk
ログのディレクトリを消去したいと思うのですが、
rm -rf /var/hoge/log/*
とすると/bin/rm Argument list too longと出てしまって消せません。 どうやったら
消せるでしょう? サブディレクトリもあります。
578:login:Penguin
08/11/25 01:46:29 xvFoqJfe
>>577
rm -rf /var/hoge/log
mkdir /var/hoge/log
/var/hoge/log/.moge は残したい、って場合はこれじゃだめだけど。
579:login:Penguin
08/11/25 02:30:00 qwKBFJS7
いや普通に考えたら
find /var/hoge -exec rm {} \;
とか
find /var/hoge | xargs rm
だろ?
580:login:Penguin
08/11/25 02:34:44 WFFUc0FW
for i in /var/hoge/log/*;do rm -rf $i;done
じゃなくて?
581:login:Penguin
08/11/25 02:36:41 qwKBFJS7
>>580
ファイル多すぎて*展開できなくてエラーになってんだから無理じゃね?
582:login:Penguin
08/11/25 02:39:23 gfINAer7
>>577
echo /var/hoge/log/* | xargs rm -rf
>>579
find 使うなら maxdepth とか使わないと無駄に処理が増えると思う。
583:login:Penguin
08/11/25 02:53:59 qwKBFJS7
>>582
いやだからファイル多すぎて*展開できないからエラーなんだろ?
echoにも渡せないと思うんだけど・・・
気のせいだったらすまんけど
584:login:Penguin
08/11/25 02:57:22 WFFUc0FW
シェルが*を展開するところまではできてるでしょ。
その結果をシェルからまとめて渡されたrmがエラー吐いてる訳で
>/bin/rm Argument list too long
585:login:Penguin
08/11/25 03:09:26 qwKBFJS7
ああ確かにその通り
echoの引数はARG_MAX超えても大丈夫?で、
xargsはrmに渡すときに調整?してくれるからこれが一番軽いと・・
覚えときます
586:login:Penguin
08/11/25 03:10:33 gfINAer7
>>580
以前、くだ質にも同じこと書いた気がするけど
rm を for 文の外に出して
for i in AAAA/* ; do echo $i ; done | xargs rm -rf
とかやった方が早いよ。
# 速度なんか気にしてないってのならスルーしてくれ。
587:577
08/11/25 04:35:06 r0vzabBk
色々提案ありがとうございます。 勉強になりました。 特に*はシェルには展開されている
けどコマンドで弾かれているという認識は参考になります。 さて、最終的に採用したいと
思いますのは>>578さんの
rm -rf /var/hoge/log
mkdir /var/hoge/log
です。 これが圧倒的に早い。 1万個の空ファイルを削除するのに>>586ですと
2.9秒ほどかかったのですが、>>578ですと0.5秒ぐらいで終わっちゃいます。
やはり1つのバイナリの中で完結してしまうのは強いですね。 ありがとうございました。
588:login:Penguin
08/11/25 07:54:57 xvFoqJfe
find とか xargs の構文を忘れてても
>>578 ならすぐ実行できるし。
もっと早く /var/hoge/log/ の使用を再開したいなら↓で。
mv /var/hoge/log /var/hoge/log.old
mkdir /var/hoge/log
rm -rf /var/hoge/log.old &
589:login:Penguin
08/11/25 08:52:27 6LjfCVVr
>>586はまとめてrmに渡してるから同じエラーになんじゃないの?
590:login:Penguin
08/11/25 11:08:32 DFgMW53d
>>589
xargs使ってるから平気だよ
591:login:Penguin
08/11/25 17:00:27 JcNYShCy
失礼します。シェルスクリプト作成がてんでわからないのでどなたか教えて下さい。
作るものは以下のものです。
1:引数に複数の整数を与えたときに、それらの和を計算するシェルスクリプトの作成。
具体的には
$ ./sum.sh 1 2 3 4 5
15
のようになるシェルスクリプト
2:現在の時刻に応じて
Good morning / Hello / Good evening / Good night
のどれかを表示するシェルスクリプト
(例えば、5:00~11:00であればGood morningと表示)
その際、引数として名前が入力されればその名前を、引数が 入力されなければ“sir”を付け加えて表示させる。 具体的には
$ ./hello.sh Taro
Hello, Taro.
$ ./hello.sh
Good morning, sir.
となるシェルスクリプト
どなたか宜しくお願いします。
592:login:Penguin
08/11/25 17:03:09 xvFoqJfe
>>591
来年は授業ちゃんと聞こうな。
593:login:Penguin
08/11/25 17:04:41 v/fLv6x4
宿題丸投げとか、頭緩すぎるだろ
594:login:Penguin
08/11/25 17:14:14 D5OL3C0Q
>>591
同じところだwww
講師は2chを監視しているから注意な
595:login:Penguin
08/11/25 17:44:18 MTxeuCTC
#!/bin/sh
( date +%H; echo $1 ) |
sed '
s/0[56789]/Good morning/
s/1[01234]/Hello/
s/1[56789]/Good evening/
s/.*/Good night/
N
s/\n$/\nsir/
s/\n\(.*\)/, \1./
'
足し算ってどうすんだ
596:login:Penguin
08/11/25 17:56:31 DFgMW53d
宿題かよw
shスクリプト 足し算 でググれば一発だろw
597:login:Penguin
08/11/25 18:10:21 MTxeuCTC
一発だった^^
#!/bin/sh
for i in "$@"; do echo $i; done |
sed '
1 {h; s/.*/hgfedcba/; x}
H; g
:a
s/9$/aaaaaaaaa/; s/8$/aaaaaaaa/; s/7$/aaaaaaa/; s/6$/aaaaaa/
s/5$/aaaaa/; s/4$/aaaa/; s/3$/aaa/; s/2$/aa/; s/1$/a/; s/0$//
s/\(aa*[^a]*\)\(a*\)/\2\1/
s/a\{11\}/ba/
y/hgfedcba/gfedcbah/
/^h/!ba; s/.$//; h; $!d
s/\([a-z]\)\1\1\1\1\1\1\1\1\1/9/g; s/\([a-z]\)\1\1\1\1\1\1\1\1/8/g
s/\([a-z]\)\1\1\1\1\1\1\1/7/g; s/\([a-z]\)\1\1\1\1\1\1/6/g
s/\([a-z]\)\1\1\1\1\1/5/g; s/\([a-z]\)\1\1\1\1/4/g; s/\([a-z]\)\1\1\1/3/g
s/\([a-z]\)\1\1/2/g; s/\([a-z]\)\1/1/g; s/\([a-z]\)/0/g
s/^0*\(.\)/\1/
'
598:login:Penguin
08/11/25 18:14:44 DFgMW53d
>>597
sed好きなの?
一応、>>596 は >>591 に対して言ったつもりだからね^^
599:login:Penguin
08/11/25 20:44:14 b3v2wMU+
普通はexprとかletなんだろうな
あとはbcに渡しちゃうとか。
bashならこんな書き方もできるけどあまり使わないな。
$hoge=$[$1 + $2 + $3 + $4 + $5]
600:login:Penguin
08/11/25 21:27:49 Q3bl66bL
>>599
これははじめてみたなぁ
$(())といいこれといい、演算機能つけるなら普通に
$hoge=$1+$2+$3+$4+$5
みたいな書き方許してくれもいいのにね
601:login:Penguin
08/11/25 22:33:31 MTxeuCTC
$(( $1 + $2 )) はPOSIX shellの範囲にあるけど
$[ $1 + $2 ] はbash拡張(しかもdeprecated)だ。letもPOSIXにない。
602:login:Penguin
08/11/25 22:49:51 +1wUZzkP
>>599-601
単なる宿題の手伝い、つまんね。sed狂の人ぐらいヒネってちょ。
603:login:Penguin
08/11/26 01:23:56 XqTaeM1U
$(( $1 + $2 )) これってできるんだ?
$((hoge + hogehoge)) みたいな書き方しかできないと思い込んでた
604:login:Penguin
08/11/26 16:54:19 fRJ0bu/c
>>602
題意を満たしながらも難解で意味不明で実用性皆無なスクリプトを書くのも楽しいな。
#!/bin/sh
echo $@`shift;echo -e \\\t|expand -t$#|tr \ +`p|dc
とか。
605:login:Penguin
08/11/27 12:25:07 nbCEJRVf
引数不定で最短なら
(IFS=+;echo "$*")|bc
とかどうだろう
606:login:Penguin
08/11/27 13:28:41 u0PIuWVz
>>604
シェルスクリプトにバイナリ埋め込んどくとかな。
…よく考えたら、これは悪どいな。
実行するまで何が起こるか判らないし、自分が生徒からこんなの
送りつけられたら無条件で○をあげてしまいそうだ。
607:login:Penguin
08/11/27 17:14:51 Rh4WMeZa
$ echo "#!/bin/bash" > hoge
とすると
bash: !/bin/bash": event not found
とエラーになります。
$ echo "#\!/bin/bash" > hoge
と ! をエスケープしたつもりでも
$ cat hoge
#\!/bin/bash
と \ が余分に付いてしまいます。
!を上手くエスケープするにはどうしたら良いでしょうか?
608:login:Penguin
08/11/27 17:30:00 L8oSt/LM
よくわからないから '#!/bin/bash'
609:login:Penguin
08/11/27 19:33:56 JHgCmyIe
>>607
$ echo "#!/bin/bash"
の解釈↓
$ man bash
イベント指示子 (Event Designator)
!string
string で始まるコマンドのうち、一番現在に近いところで実行したものを参照します。
610:607
08/11/28 20:18:54 yC0octAN
>>608>>609
ダブルクォート内では ! のエスケープはできないようですね。
シングルクォートで囲むことにします。
ありがとうございました。
611:login:Penguin
08/12/07 04:03:19 wQWU7SKF
厳密にはexpectの質問なので、スレ違いだはと思うのですが…
1 #!/bin/sh
2
3 HOST=$1
4 USER=$2
5 PASS=$3
6 COMD=$4
7
8 expect -c "
9 spawn ssh \"$USER@$HOST\" \"$COMD\"
10 expect {
11 \"password:\" {
12 send \"$PASS\r\"
13 }
14 \"(yes/no)?\" {
15 send \"yes\r\"
16 exp_continue
17 }
18 }
19 expect
20 "
21 echo $?
9行目でspawnしたsshの戻り値を得たいのですが、どうしたら良いでしょうか?
上記だと、当然ですが、21行目で表示されるのは8行目のexpectの戻り値になります。
あt、19行目のexpectが無いと動かないのですが、そんな物なんでしょうか?
612:login:Penguin
08/12/09 09:16:00 73r9bgNC
ssh-agent使った方が簡単。
1. exit statusはwaitを使って得て、exitでshellに引き渡してください。
2. 10行目のexpectで、パスワード、ホストキー以外の出力も食うようにする。
613:login:Penguin
08/12/13 01:21:37 jyj+RUH2
>>612
> 1. exit statusはwaitを使って得て、exitでshellに引き渡してください。
これのやり方をもう少し具体的にお願いできませんか?
manに以下の記述はあるんだけど、
wait は、通常 4 つの整数のリストを帰す。最初の整数は、終了を待ち構え
ているプロセスの pid である。 2 つめの整数は、関連する spawn id であ
る。 3 つめの整数は、オペレーティングシステムエラーがあれば -1、そう
でなければ、0 である。 3 つめの整数が 0 であれば、4 つ め の 整 数
はspawn さ れたプロセスからのリターンコードである。3 つめの整数が -1
であれば、4 つめの整数はオペレーティングシステムによって設定さ れ た
errno の値である。
この値をどうやって受け取るのかわからないのです。
tarballのexampleの中も見てみたけど、waitから値を受け取るような処理は無いようでした。
614:login:Penguin
08/12/13 22:44:02 b12qnNPM
#!/bin/sh
echo '何かオモシロいスクリプトをうpして'
615:login:Penguin
08/12/13 22:49:30 4TqEVqdZ
>>614
sudo su -c ”yes ’\(^o^)/’ > /dev/sda”
これやってから、ハードディスクを覗くと楽しいよ
616:login:Penguin
08/12/14 03:10:56 YLiph78l
>>615
新しいなwww
617:login:Penguin
08/12/14 03:51:27 07cIEQdu
yesなんてコマンド始めて知ったわ。
健全な使い道あるのか?と思ってググったら
同じ疑問持ってる人が一杯いた。
rpm -e yes じゃ削除できないし。
GNUはこんなコマンド標準装備するな
618:login:Penguin
08/12/14 04:46:19 x3iOnWd3
>>617
つ yes no | rm -i ...
rm -iのトコはまともにバッチ実行させてくれない色々なクサレプログラムに
置き換えて使え。