为什么分配给别名时字数输出不准确?

为什么分配给别名时字数输出不准确?

我用来squeue显示如下的工作

工作

我想计算正在运行的作业数(根据第五列)。命令

squeue -h -u $USER | awk '{print $5}' | grep R | wc -l

做得很好,所以我把它放入~/.cshrc文件中的别名中

alias rj "squeue -h -u $USER | awk '{print $5}' | grep R | wc -l"

但是,别名始终不会显示正确的号码。例如

别名

你能帮我一下吗?提前谢谢!

答案1

因为整个命令都在双引号内,所以内部' '还不能作为引号,而只能作为常规文本,并且$5将扩展为变量就在别名定义期间。它可能是一个空字符串,因此您的 awk 命令将awk '{print }'不再截断不需要的列,结果您的 grep 命令匹配过多。

反斜杠转义$

alias fj "... | awk '{print \$5}' | ..."

答案2

我最终不得不为此编写一个脚本,再次使用tcsh。这是脚本

#!/usr/bin/tcsh
set n_running = `squeue -h -u $USER | awk '{print $5}' | grep R | wc -l`
set n_total = `squeue -h -u $USER | wc -l`
echo $n_running/$n_total

将其另存为jn并执行chmod +x jn,然后在~/.cshrc文件中写入

alias jn '/path/to/jn'

并且路径必须是绝对路径。然后是源~/.cshrc文件,您就可以使用了jn

该脚本将打印出正在运行的作业数与总作业数之差。

相关内容