0

次のエラーが表示されます。

> echo "${$(qstat -a | grep kig):0:7}"
-bash: ${$(qstat -a | grep kig):0:7}: bad substitution

.の前の番号を取得しようとしています

> qstat -a | grep kig
1192530.perceus-     kigumen     lr_regul pbs.sh            27198     2     16    --  24:00:00 R 00:32:23

qdelそれをopenPBSの引数として使用して、ログインで開始したすべてのプロセスを削除できるようにしますkigumen

理想的には、これはうまくいくはずです:

qdel ${$(qstat -a | grep kig):0:7}

これまでのところ、これだけが機能します:

str=$(qstat -a | grep kig); qdel "${str:0:7}"

しかし、一時変数のないクリーンなワンライナーが必要です。

4

3 に答える 3

1

使用しているシェル部分文字列構造 ( :0:7) は、変数に対してのみ機能し、コマンド置換では機能しません。これを 1 回の操作で実行する場合は、次のいずれかのように、パイプラインの一部として文字列をトリミングする必要があります。

echo "$(qstat -a | grep kig | sed 's/[.].*//')"
echo "$(qstat -a | awk -F. '/kig/ {print $1}')"
echo "$(qstat -a | awk '/kig/ {print substr($0, 1, 7)}')"

(最初の 2 つは最初の "." の前にすべてを出力することに注意してください。最後の 7 文字は最初の 7 文字を出力します。) それらのどれもが特にクリーンであるかどうかはわかりませんが、temp 変数なしでそれを行います...

于 2013-08-05T22:40:28.100 に答える
0

さらに別の方法:

    foreach   m1 in $(qstat -a );do
           if [[ $m1 =~ kig ]];then
               m2=${m1%.kig}
               echo "kig found $m2 "
               break
           fi
    done
于 2013-08-05T23:02:57.383 に答える