[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 02/10 13:03 / Filesize : 248 KB / Number-of Response : 977
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

シェルスクリプト相談室



1 名前:デフォルトの名無しさん [2005/04/04(月) 03:43:03 ]
シェルスクリプトに関する質問・回答や議論等を行う相談室スレッド。 


684 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 01:02:09 ]
main.sh
------------
#!/bin/bash
bash sub.sh
bash last.sh
------------

で、いいのではないかと思うのは気のせいか。


685 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 01:19:02 ]
>>684
たぶん>>678も同じ疑問を持って書いたんだと思う。


686 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 09:31:43 ]
>>683
sleep というコマンドを知らなかったとき、
この情報に辿り着くために必要な検索単語ってなんだ?

687 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 13:52:26 ]
シェル 秒 待つ
www.google.co.jp/search?q=%E3%82%B7%E3%82%A7%E3%83%AB+%E7%A7%92+%E5%BE%85%E3%81%A4


688 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 00:00:31 ]
シェルスクリプトの本くらい立ち読みでいいから流し読みしろよ。

流し読みで覚えられないなら買え。

それやった上でsleepなんぞ知らないって言うなら諦めろ。


689 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 08:04:10 ]
usleep

690 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 12:16:49 ]
usleepなんて無いだろw

691 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 17:44:38 ]
何怒ってんのかね
気に入らなけりゃスルーすればいいのに


692 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 19:20:58 ]
>>691
オマエモナーw




693 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 19:52:12 ]
usleepのuがμのつもりだったと理解したときASCIIの世界に生きる人に同情した。


694 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 20:17:49 ]
おいおい
そこまで意地張ったのになんでnanosleepなんだよ!!
かなり天邪鬼だ

695 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 22:04:14 ]
>>693
マイクロは uC という表記方法もあるよ

696 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 23:15:22 ]
>>695
結局それも「字形が似てるから代用」には違いないんでしょ?

697 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 23:46:50 ]
μなんてDBCSローカルな文字つかって喜んでる椰子キモイ

698 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 23:50:13 ]
μ(greek small letter mu)ならいいのか

699 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 10:48:43 ]
技術系だと割と当たり前に使うけどなぁ。usecとかum、uFとか。或いは組み合わせでug/lとかも。

700 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 14:35:50 ]
それだってu(ユー)にマイクロの意味があるわけじゃないだろ?
あくまでμの代用であることには違いないと思うが。



701 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 17:57:36 ]
不毛だ

702 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 22:38:48 ]
習慣



703 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 00:39:35 ]
bashスクリプト中で
cmd echo "foo-san"
ってやると
echo "foo-san"
foo-san
って感じに、実行されるコマンドの内容が先に表示される関数って、定番なのありますか?
cmd() を echo $*;eval $* にしてみたけど、" とか ' とかの処理が旨くいかない。
DOS の echo on モードみたいのでもいいかも。

704 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 00:47:46 ]
>>703
set -x

705 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 00:49:12 ]
echo "." |xargs -t

706 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 09:52:26 ]
>704
おーなるほど、そういうコマンドがあるのかー。勉強になりました。

>705
ありがとうございます。
でも echo つかうと、ダブルクォーテーションが表示されないのが、ちょっとかな、と。

707 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 11:10:16 ]
>>706
set -v

708 名前:デフォルトの名無しさん [2007/10/24(水) 21:03:29 ]
親フォルダ内でシェルスクリプトを開いて、
Folder1に移動し、ABCを実行する。
1時間おきにプロセスABCがあるかチェックする。
終了したら、親フォルダに移動しFolder2でも同じことをする
というスクリプトを書いたんですけど、
whileのdoで文法エラーが出て困ってます。

#!/bin/sh

for i in 1 2
do
cd Folder$i
nohup ./ABC &

while[$isAlive -eq 1]
do 
sleep 1h
isAlive='ps -ef | grep " ABC " |\
grep -v grep | wc - |'
done

cd ..
done

709 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 21:18:40 ]
while[$isAlive -eq 1]

while文の文法の一部ではない。
[というコマンドの最後に ] いう引数があるコマンド行(リスト)。
よって空白が必須。



710 名前:708 [2007/10/24(水) 21:31:41 ]
>>709
whileのところはできました。
ありがとうございます。

今度は、forのdoがおかしいって出ました。
forのなかでwhile制御することってできないんでしょうか?


711 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 21:41:40 ]
エラーメッセージ書いてー。

'(単一引用符)は`(逆向き単一引用符)の間違いだよな?
wc - |(マイナス、スペース、縦棒) は wc -l(マイナス、エル) の間違い?


712 名前:708 [2007/10/24(水) 22:21:55 ]
10行目、doが、syntax error
です。って表示されました。

逆向き単一引用符で、wc -lエルです。
失礼しました。



713 名前:708 [2007/10/24(水) 22:24:03 ]
連投すいません。
エラーは、forじゃなかったです。
whileのところでした。

714 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 23:01:32 ]
もっかいきっちりコピペしろ

715 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 00:23:06 ]
俺が同じマシン使ってたらABCという名前で永久に終了しないプログラムを動かしてやる。

716 名前:708 [2007/10/25(木) 03:03:38 ]
>>714
ごめんなさい。もいっかい書き直します。
これの、whileのdoで文法エラーがでます。

>>715
永久に終了しない・・・作ってほしい

#!/bin/sh


for i in 1 2

do

cd Folder$i

nohup ./ppln &


while[ $isAlive -eq 1 ]

do

sleep 1h

isAlive=`ps -ef | grep " ppln " | grep -v grep | wc -l`

done

cd ..

done

717 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 04:58:38 ]
>>716
while と [ の間にスペースが足りないのはコピペミスだよね?

最初の while のチェックの時に $isAlive が未定義。
で、 [ コマンドが引数が足りないってエラーを吐く。
だから [ コマンドに与える変数はクォートで括っておくが基本。

while [ "$isAlive" -eq 1 ]

あと pgrep があれば while の処理はもっと簡単に書けるよ。

718 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 08:21:46 ]
ただ、>>715 がいうように、
既に誰かが同じ名前の無関係なプロセスを走らせていたらどうする?
「永久に」っていう細かいところでただの煽りとか思わずに、本質読み取らなきゃ。

719 名前:708 [2007/10/25(木) 16:02:00 ]
>>717
ご指摘通りに作り直したら動きました。修正したものを張っときます。

>>718
おっしゃるとおりです。全然見えてませんでした。
実際に、スクリプトの名前を”ABC-sc.sh”としたら、
プロセスの出力が”2”とされてしまい、うまくいきませんでした。
もうちょっと改良について考えたいと思います。
プログラミングとかLinuxは初心者で、まだまだ勉強しないといけないって感じてます。


#!/bin/sh
for i in 1 2
do
cd Folder$i
nohup ./ABC &

sleep 20
isAlive=`ps -ef | grep "ABC" | grep -v grep | wc -l`

echo "$isAlive"
while [ "$isAlive" -eq 1 ]

do
sleep 1h
isAlive=`ps -ef | grep "ABC" | grep -v grep | wc -l`
echo "$isAlive"
done
cd ..
done

720 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 01:12:26 ]
>>719
$! という変数は知ってる?

nohup ./ABC &
echo "$!" # ← ABC の PID が表示される

これなら >>718 の罠にはかからないよ

721 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 09:35:42 ]
バックグラウンドで動かす意味なくね?

722 名前:デフォルトの名無しさん [2007/10/28(日) 21:40:09 ]
引数に対応した干支を表示するシェルスクリプトを
Bshellで作成したいのですが、作成方法を教えて頂けないでしょうか?



723 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 22:31:24 ]
eto=`expr ¥( $1 + 8 ¥) % 12`
年は西暦。子年を0にしたかったので8を加えてある。


724 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 12:33:07 ]
>>719
ps -efではなく、psのフォーマット指定を使えば混乱が減らせると思う。
# >720も手だけど。
ps -efだと、例えば引き数が"ABC"なプロセスでも混乱してしまうよ。

725 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 01:21:20 ]
>>716
初心者のくせに我輩を煽るとはいい度胸してるな。おととい来やがれ。
度胸に免じて、厨房どもに一つテクを授けてやろう。

kill -0で生存確認しろ。

726 名前:デフォルトの名無しさん mailto:sage [2007/12/04(火) 08:34:30 ]
質問お願いします!
適当なファイルを作ってその中には数字を記述しておいて、キーボードからそのファイルを読み込んで、その記述してある数字に+2を行った結果を画面上に出力するというシェルを作りたいのですが、どのようにすればよいか教えていただけませんでしょうか?

readとループ文を使って作りたいんですが自分で調べてもあんまりわかったんでみなさんのお力をお貸しいただけないでしょうか?

727 名前:デフォルトの名無しさん mailto:sage [2007/12/04(火) 10:07:29 ]
#!/bin/sh

read num
while `test $num`
do
echo `expr $num + 2`
read num
done

ちょっと違うか。

728 名前:デフォルトの名無しさん mailto:sage [2007/12/04(火) 11:34:29 ]
awk使っていいなら凋落。
awk '{print $1 + 2;}' 適当なファイル

729 名前:c mailto:sage [2007/12/04(火) 13:14:06 ]
% cat x
100
% cat add2
#!/bin/sh
num=`cat $1`
expr $num + 2
% ./add2 x
102



730 名前:デフォルトの名無しさん mailto:sage [2007/12/04(火) 13:18:06 ]
ん? こっちか?
% cat x
100
200
500
% cat add2
#!/bin/sh
exec < "$1"
while read num
do
  expr $num + 2
done
% ./add2 x
102
202
502



731 名前:>>726 mailto:sage [2007/12/04(火) 14:04:57 ]
>>727 >>728 >>729 >>730
回答サンクスです!
いろいろな考え方ができるのですね。勉強になりました。
ぜんぶやってみたいと思います。助かりました!ありがとうございます。

732 名前:デフォルトの名無しさん mailto:sage [2007/12/05(水) 00:36:45 ]
シェルってゆうな。クズ。



733 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 20:46:08 ]
>>732
やっぱりフルネームで言わなきゃ駄目なのか?

734 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 21:02:25 ]
まあそれ抜きにしてもアレだろ

735 名前:login:Penguin [2007/12/07(金) 18:11:42 ]
午前2時まで、pingを10秒ごとに打ちたいのですが
きれいな書き方おしえてください

736 名前:デフォルトの名無しさん mailto:sage [2007/12/07(金) 18:29:03 ]
# crontab
*/10 0-1 * * * ping toTarget

737 名前:デフォルトの名無しさん mailto:sage [2007/12/07(金) 18:32:54 ]
いけね、10分ごとにしちまったw おまけにpingが無期限実行だぜ。

つーことで訂正。
# crontab
0 0 * * * ping -i 10 -c 720 toTarget

738 名前:735 [2007/12/07(金) 18:35:34 ]
>>737さま
ありがとう!

739 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 10:55:42 ]
既にシェルスクリプトじゃなくてUNIXよろず相談室だな(w

740 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 18:52:32 ]
Linuxのpasswdみたいにコマンドを打った後に出てくる質問に答えていく場合は
#!/bin/sh

passwd aaaa
pass
pass
とかじゃ無理みたいなのですが、どうすればいいのでしょうか?

741 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 20:04:22 ]
ホントによろず相談室だなぁ……

>>740
リダイレクトでもしてみたら? passwdコマンドがリダイレクトを受け付けるとも思えないけど知っておいて損はないし。

742 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 20:19:44 ]
>>740
対話的処理をしたいときは expect



743 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 21:11:49 ]
>>740
Tclに嫌気が差したら Expect.pm (Perl)

744 名前:740 mailto:sage [2007/12/23(日) 00:02:58 ]
>>742
で以下のようにしてみたのですが
#!/bin/sh

passwd testid
expect \"*:\"
send "test\n"
expect \"*:\"
send "test\n"

cronのメールで
useradd: user testid exists
New UNIX password: New UNIX password: New UNIX password: passwd: Authentication information cannot be recovered
Changing password for user testid.
aaaa: line 6: expect: command not found
aaaa: line 7: send: command not found
aaaa: line 8: expect: command not found
aaaa: line 9: send: command not found
といわれました。
expectが見つからない・・?何か入れる必要あるんでしょうか?

745 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 00:32:51 ]
cronから起動されるときのPATHがどうなるかmanで勉強する。

which expectしてみる。
$PATHの値を見てみる。
locate expectしてみる。
パッケージ管理システムを使ってるならそれを使ってインストールされてるか見てみる。(rpm系Linuxのrpm -q expectみたく)
/usr/localや/optなどのそれっぽいディレクトリの下のどこかにあるのかもしれない。

あと、expectの使い方って

expect -c "
...
spawn passwd #パスワードコマンド起動
expect ログイン要求を待つ
send ログイン名
云々
"

じゃなかったっけ?


746 名前:740 mailto:sage [2007/12/23(日) 14:11:46 ]
>>745
ズバリですね。yum install expectとしたらインストールされていないらしく入れますか?と。
expect -c "
spawn passwd id
expect \":\" ; send 〜でできました。
大変参考になりました、ありがとうございます。

747 名前:デフォルトの名無しさん [2007/12/29(土) 11:20:36 ]
初心者的な質問で,申し訳ないです。
ヒアドキュメントで変数に代入する方法がわからなくて。

list=<<EOT
A
B
C
EOT
echo $list

としても$listには何も代入されなくって。

748 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 11:33:39 ]
ヒアドキュメントは、PerlやらRubyやらでは変数への代入に使うけど、
シェルスクリプトでは、コマンドの標準入力をすげ替えるモノじゃないかな。


749 名前:747 mailto:sage [2007/12/29(土) 12:23:18 ]
>>748
なるほど,標準入力のかわりだったのですか。
ということで

read list <<EOT #--> A

としたらという結果。あともう一歩というところまできました。


750 名前:747 mailto:sage [2007/12/29(土) 12:38:15 ]
とりあえず
while read line; do list="$list $line";done <<EOS
A
B
C
EOS
echo $list


ん〜,改行がなくなってしまう...

751 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 13:21:26 ]
そりゃぁ、echoすれば改行は消えるね。

752 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 21:26:09 ]
>>750
ダブルクォートをつけてみな。

echo "$list"


見た目がいまいちかもしれんが、こうやって代入する事もできるよ

list='A
B
C'




753 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 18:50:43 ]
zshとbashじゃそこの挙動違うんだな

754 名前:デフォルトの名無しさん [2008/01/02(水) 15:16:56 ]
シェル初心者ですが
pingして反応が無かったらまたAにGOTOして
というのを書いているつもりなんですが
これをcronで実行させると
A:: not found となります。
GOTOさせる場合の正しい書き方を教えてください

#!/bin/sh
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin
HOST=192.168.1.6
TIMEOUT=5

A:;
/sbin/ping -t $TIMEOUT -o $HOST
if [ $? != 0 ]; then
goto A;
else
/bin/echo "$HOST is Alive!"
fi


755 名前:デフォルトの名無しさん [2008/01/02(水) 16:35:27 ]
あっ、gotoでなくてもいいのか
こうすればいいてことですね

while [ $? != 0 ]
do
/sbin/ping -t $TIMEOUT -o $HOST
done


756 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 05:20:05 ]
>>755
すでに解決しているようだが、こんな書き方もできる。

until /sbin/ping -t $TIMEOUT -o $HOST
do
:
done

757 名前:デフォルトの名無しさん [2008/02/09(土) 17:00:30 ]
自分に渡されたコマンドオプションをそのままほかのコマンドに渡したいのですが
うまくいきません

runruby.shに
cmd=ruby
${cmd}" $@"
と書いて
./runruby -e 'puts "Hello"'を実行すると
ruby: No such file or directory --  -e (LoadError)と言われてしまいます


758 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 17:11:50 ]
>runruby.shに


>./runruby -e 'puts "Hello"'を実行すると
runruby.shはどこに行った?
それと、そのrunruby.shによるとrubyに" -e"を渡すことになるぞ。

759 名前:757 mailto:sage [2008/02/09(土) 17:18:29 ]
>>758 申し訳ございません 間違いました
./runruby.sh -e 'puts "Hello"'でした

runruby.shの内容を
cmd=ruby
${cmd} ${@}
にしてみたらエラーメッセージはでなくなったのですがHelloも表示されず終了しましたorz

760 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 17:22:54 ]
なんで"$@"にしないの?

761 名前:757 mailto:sage [2008/02/09(土) 17:31:24 ]
>>760
できました!!
ありがとうございます

762 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 17:33:10 ]
つまり、rubyコマンドはコマンドライン引き数の先頭が空白だとファイル名と看做すってことか。



763 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 17:39:39 ]
bashでしか試してないけど、、、
${cmd}" $@" -> "ruby\ -e" "puts \"Hello\""
$cmd "$@" -> "ruby" "-e" "puts \"Hello\""
"${cmd} $@" -> "ruby -e" "puts \"Hello\""
"${cmd}" "$@" -> "ruby" "-e" "puts \"Hello\""

"$@" -> "$1" "$2" ...
"str$@" -> "str$1" "$2" ...
"str $@" -> "str $1" "$2" ...
って感じで展開されているのかな?

764 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 17:42:01 ]
3つ目、
x "${cmd} $@" -> "ruby -e" "puts \"Hello\""
o "${cmd} $@" -> "ruby\ -e" "puts \"Hello\""

765 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 17:59:05 ]
よく見たら、 "$@" じゃなくて " $@" なのかよ。


766 名前:デフォルトの名無しさん [2008/02/11(月) 18:09:03 ]
configureでif test x"$enable_shared" = xyes; thenっていうふうに
xを付け加えて比較してるのをよく見るのですがxはなんのためですか?

767 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 18:12:40 ]
空文字列のときも大丈夫にするためかな
xつけないとtestで構文エラー出ちゃうでしょ?

768 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 18:13:32 ]
$enable_sharedがマイナスで始まってる場合を考慮……はconfigureでは不要か。


769 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 01:38:48 ]
変数をクォートしないとこうなるけど、この場合は関係ないか

$ x='-n 3 -o 1'
$ if test $x = 1; then echo ok; fi
ok


770 名前:デフォルトの名無しさん [2008/02/15(金) 18:24:02 ]
echo `df`
だと1行で出力されて
echo "`df`"
だと複数行出力になるのはなんででしょうか?

771 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 19:00:26 ]
>>770
echo "foo
bar"
のようにダブルクォートの中では、改行が区切り文字にならなくなるから

772 名前:デフォルトの名無しさん [2008/02/15(金) 19:44:39 ]
>>771
ああ、そうか。改行って""の中だと改行として有効なのか。
ふむ、""がないと、単なる区切りになっちゃうわけですね。




773 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 22:27:13 ]
>>767-768
configure普通autoconfで自動生成するから、
ハイフンで始まっていたり=だったりするのを考慮したコードが
不必要な部分でも出てくるだけ。

774 名前:デフォルトの名無しさん [2008/02/16(土) 02:22:13 ]
自分が所持している映画のDVDのリストを整理しているのですが、
CSV形式で、例えば次のようになっている時に、

"jean-luc godard","1967 week end"
"jean-luc godard","1965 pierrot le fou"
"jean-luc godard","1960 a bout de souffle"



"Jean-Luc Godard","1967","Week End"
"Jean-Luc Godard","1965","Pierrot Le Fou"
"Jean-Luc Godard","1960","A Bout De Souffle"

と一括変換したいのですが、どのようにすればいいのでしょうか?
やりたいことは、
1). まず、2番目のフィールドが"制作年 タイトル"となっているのを"制作年","タイトル"に分けたいのと、
2). 次に、総ての単語の頭文字を大文字にしたい、
ということなんです。

1). は sed で何とかなりそうなのですが、2). が分かりません。

どなたかお助け下さい。
あるいは他に正しいスレがあるようでしたら誘導をお願いします。

775 名前:デフォルトの名無しさん [2008/02/16(土) 02:24:27 ]
すみません。やはり 1). もよく分かりません。
どなたか助けてください。お願いします。

776 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 02:34:45 ]
手抜きですが
perl -pe 's/\b(\w+)/\u$1/g; s/"(\d+)\s*/"$1","/'

777 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 03:11:07 ]
ただシェルじゃないんだよなそれだと。。。
俺もPerlとかでしか思いつかないけど

778 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 03:14:45 ]
>>774
シェルスクリプトだけでは無理でも(1)も(2)もawkでできますね。
取り敢えず(1)はこんな感じ。
awk -F, '{$2 = substr($2, 1, 5) "\",\"" substr($2, 6);} {print;}'

779 名前:デフォルトの名無しさん [2008/02/18(月) 01:45:59 ]
[root@hoge admin]# ls -l | grep forward
-rwsr-xr-x 1 root admin 300 2月 18 01:16 setforward.sh
[root@ibm admin]# cat setforward.sh
#!/bin/bash
# set variable
PATH=/home/
USER=$1
ADDRESS=$2

cd $PATH$1

cat << EOF > .forward
"|IFS=' ' && exec /usr/bin/procmail -f- || exit 75 #$1"
EOF

cat << EOF > .procmailrc
:0 c
! $ADDRESS
EOF

[root@hoge admin]# ./setforward.sh admin test@example.jp
./setforward.sh: line 14: cat: command not found
./setforward.sh: line 20: cat: command not found

CentOS5.0です。
一般ユーザに、他のユーザの転送設定をさせたいと考えています。
こんな感じでcatコマンドが無いと言われてしまいます。
そのくせ、空っぽの.forwardと.procmailrcファイルが作成されます。
なぜcommand not foundになってしまうんでしょうか?

780 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 01:51:29 ]
PATHは使っちゃだめよ

781 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 02:05:32 ]
環境変数PATHはコマンド(実行ファイル)を検索するためのものだから、
違う変数名にしないと駄目よ。


782 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 02:13:29 ]
>>779
大文字の変数は環境変数で使われる事が多いから
小文字を使った方がいいよ。



783 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 08:42:13 ]
>>779
自分で勝手にサーチパスを潰しておいて、見つけてくれないと文句を言うとはなんてぇゆとりだ。

784 名前:779 [2008/02/18(月) 13:10:40 ]
>780-783
ありがとうございます。 m(_ _)m

続けてもう一つ・・・
-rwsr-xr-x 1 root root 300 2月 18 01:16 setforward.sh

このシェルを動かして、一般ユーザで
他の一般ユーザの転送設定をしようとすると、
「cd」のところで"/home/user: 許可がありません"と
弾かれてしまいます。
SUIDをつけてあるのに、何がいけないんでしょうか?

またまたよろしくお願いします。







[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<248KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef