0

コードは次のとおりです。

at -k $wval <<ENDMARKER

while [[ -s Usr_List ]]; do
    for i in $(cat Usr_List); do
        if finger -m | grep $i; then
            echo "$i is online" | elm $mval
            sed "/$i/d" <Usr_List >tmplist
            mv tmplist Usr_List
        fi
     done
done

ENDMARKER

実際の現場を見てみると、

while [[ -s Usr_List ]]; do
    for i in jim
joe 
tim; do
        if finger -m |grep ; then
            echo " is online" | elm jack
            sed "//d" <Usr_List >tmplist
            mv tmplist Usr_List
        fi
     done
done

Jim joe と tim は、リスト Usr_List の名前です。

cat Usr_List と $i が問題のようですが、これを修正する方法がわかりません。

ありがとう

編集: at ジョブは、ジムが予想外だったというメールを送信します。

4

2 に答える 2

0

何が起こっていますか

問題は、at コマンドを入力すると、ヒアドキュメントの行が展開されることです。つまり、シェルは次のように展開$(cat Usr_List)されます。

jim
joe
tim

そして$i、まだ定義されていないため、空の文字列に展開されます。

あなたがしたいこと

コマンドに何をすべきかをat伝えているときではなく、コマンドが起動したときにこれらの変数を展開することが本当に必要です。at

修正方法

シェルがヒアドキュメントで変数を展開しないようにするには、最初に区切り文字を引用するだけです。したがって、最初の行を変更します。

at -k $wval <<ENDMARKER

at -k $wval <<"ENDMARKER"

そしてそれはうまくいくでしょう。

ちなみに、

私のatコマンドにはオプションがないので、興味-kがあります。

于 2013-08-07T19:37:48.237 に答える
0

、特に「....後で/bin/shを使用して実行される」に関する部分を確認man atしてください。表示されているスクリプトは有効ですbashが、システムの内容によって/bin/shは、有効な構文ではない場合があります。

于 2013-03-18T19:52:29.443 に答える