我收到以下错误:
> echo "${$(qstat -a | grep kig):0:7}"
-bash: ${$(qstat -a | grep kig):0:7}: bad substitution
我正试图在<{p>} .
之前取数字
> qstat -a | grep kig
1192530.perceus- kigumen lr_regul pbs.sh 27198 2 16 -- 24:00:00 R 00:32:23
并将其用作openPBS中qdel
的参数,以便我可以删除我使用登录kigumen
开始的所有进程
理想情况下,这应该有效:
qdel ${$(qstat -a | grep kig):0:7}
到目前为止,只有这个有效:
str=$(qstat -a | grep kig); qdel "${str:0:7}"
但我想要一个没有临时变量的干净单行。
答案 0 :(得分:1)
您正在使用的shell子字符串构造(:0:7
)仅适用于变量,而不适用于命令替换。如果您想在单个操作中执行此操作,则需要将字符串修剪为管道的一部分,如下所示:
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)}')"
(注意前两个打印在第一个“。”之前的所有内容,而最后一个打印前7个字符。)我不知道它们中的任何一个特别清洁,但它们没有临时变量。 ..
答案 1 :(得分:1)
qstat -u palle | cut -f 1 -d "." | xargs qdel
杀死我所有的工作...通常我会在切断之前把工作名称弄出来......
所以我使用一个小脚本“idlist”:
qstat -u palle | grep -E "*.in" | grep -E "$1" | cut -f 1 -d "." | xargs
要查看我所有的“地图_...”工作:
idlist "map_*"
杀死我所有的“map _....”工作:
idlist "map_*" | xargs qdel
答案 2 :(得分:0)
还有另一种方式:
foreach m1 in $(qstat -a );do
if [[ $m1 =~ kig ]];then
m2=${m1%.kig}
echo "kig found $m2 "
break
fi
done