如何在 watch 命令中使用别名,其中包含另一个别名以及后一个别名中的一些双引号和单引号?

如何在 watch 命令中使用别名,其中包含另一个别名以及后一个别名中的一些双引号和单引号?

alias vov="scontrol -o show nodes | grep -e \"-lkeb\" -e \"-gpu\"| awk '{ printf(\"%-15s%-9s%-7s%-18s%-11s%-9s%s\n\", substr(\$1, 10), substr(\$4, 10), substr(\$5, 8), substr(\$9, 6), substr(substr(\$23, 12)/1024,0,5), substr(substr(\$24, 10)/1024,0,5), substr(\$38, 11))}' | awk '{printf(\"%-15s%-7s%-9s%-18s%-7s%-9s%50-s%2-s%9-s%9-s%9-s\n\", \$1, \$3, \$2, \$4, \$5, \$6, \"|\"\$7, \"|\", \$3-\$2, \$5-\$6, substr(\$4,length(\$4))-substr(\$7,length(\$7)))}' | awk '\$11 != 0' | awk 'BEGIN {print \"NodeName CPUTot CPUAlloc Gres MemTot MemAlloc AllocTres CPUAvail MemAvail GPUAvail CPU/GPU\"}{print \$0 FS \$9/\$11}'"

当我将上面的代码写入我的.bashrc文件时,它运行良好。

watch "scontrol -o show nodes | grep -e \"-lkeb\" -e \"-gpu\"| awk '{ printf(\"%-15s%-9s%-7s%-18s%-11s%-9s%s\n\", substr(\$1, 10), substr(\$4, 10), substr(\$5, 8), substr(\$9, 6), substr(substr(\$23, 12)/1024,0,5), substr(substr(\$24, 10)/1024,0,5), substr(\$38, 11))}' | awk '{printf(\"%-15s%-7s%-9s%-18s%-7s%-9s%50-s%2-s%9-s%9-s%9-s\n\", \$1, \$3, \$2, \$4, \$5, \$6, \"|\"\$7, \"|\", \$3-\$2, \$5-\$6, substr(\$4,length(\$4))-substr(\$7,length(\$7)))}' | awk '\$11 != 0' | awk 'BEGIN {print \"NodeName CPUTot CPUAlloc Gres MemTot MemAlloc AllocTres CPUAvail MemAvail GPUAvail CPU/GPU\"}{print \$0 FS \$9/\$11}'"

当我将上面的代码粘贴到我的终端 ( /bin/bash) 时,它也能正常工作。实际上要观看的代码只是vov.

但我遇到了一些问题:

  1. 我无法watch vov在我的终端 ( /bin/bash) 中使用。
  2. 我无法使用alias将第二个代码(较长版本)分配给我的.bashrc.
  3. 我无法使用aliaswatch vov(较短版本)分配给我的.bashrc.

你能帮我解决这3个问题吗?

答案1

watch我在和 shell 别名方面也遇到了同样的问题。我不确定为什么别名无法观看,但您可以通过将别名放入 shellscript 中并调用watch它来解决(或解决)这个问题。

创建一个文件,在第一行使用vovshebang #!/bin/bash,然后scontrol...etc在后续行中使用 shebang,保存该文件,chmod +x vovmv vov ~/.local/bin/或 上的其他位置$PATH)。

然后你可以做watch -t -n 1 -c vov

我忘记了 flagswatch需要什么,所以我有一个名为 的 shellscript sho,看起来像watch -t -n 1 -c "$1"这样,你可以这样做sho vov

相关内容