我在CLI上建立了一个kludgey脚本,但无法成功移入文本文件。我知道它写得不好,但是我有兴趣解决我遇到的问题,而不是重写它。我想了解为什么我写得不好的代码在命令行执行时的行为与另存为文件时的行为不同。
我认为这与脚本中过早插补的内容有关,因为如果将单行版本替换为同一文件(不格式化),则会得到相同的输出。请注意下面的调试行以及它如何不打印。
脚本内容
#!/ bin / bash totalNodes = 0#初始化和 echo -e“ ID \ t \ t \ tNODES”; #标题行 对于$(中的n2(#n2将使用节点数填充(将添加到totalNodes中)) 为$(中的n(#n是中间字符串)修饰Resource_list.nodes行(kludgy) 为我在$( qstat | grep“ ef” | cut -f 1 -d'')#i获取ef队列行 做 回声“调试$ i” j = $(echo $ i | sed's /(\ d +)\ .. + / \ $ 1 /'); #j是实际ID qstat -f | grep -A43 $ j; #从qstat提取此作业ID的完整输出 done | grep Resource_List.nodes)#关闭循环n的定义 做echo $ {n}; done | grep ppn)#通过循环关闭n2的定义 做 echo“ $ j $ {n2:0:1}”#输出行 totalNodes = $((($ totalNodes + $ {n2:0:1}))#计数节点 完成 echo“在EF队列中运行的$ totalNodes个16个节点”
预期的输出(我在命令行中得到的):
身份证号码 2378512.yaddayadday-adm 4 2378512.yaddayadday-adm 4 2378512.yaddayadday-adm 4 2378512.yaddayadday-adm 2 EF队列中运行的14个节点(共16个)
脚本的当前输出
身份证号码 4 4 4 2 EF队列中运行的14个节点(共16个)
所以我很困惑如何获取正确的总数(这意味着正确定义了$ n2),但是我什至无法在带有打印的调试行(第8行)上打印$ i。
供参考,这里是单线。就像我说的那样,当在命令行上执行时,这给出了上面显示的“期望的输出”,但是当我将其保存为文件而没有其他格式时,其输出与上面的代码块“脚本的内容”相同。
totalNodes = 0; echo -e“ ID \ t \ t \ tNODES”;对于$ 2中的n2(对于$中的n(对于$(qstat | grep“ ef” | cut -f 1 -d'')中的i); j = $(echo $ i | sed's /(\ d +)\ .. + / $ 1 /'); qstat -f | grep -A43 $ j; done | grep Resource_List.nodes);执行echo $ {n} ; done | grep ppn);回显“ $ j $ {n2:0:1}”; totalNodes = $((($ totalNodes + $ {n2:0:1}))); 完成;回显“在EF队列中运行的$ totalNodes个16个节点”
命令替换方法$()
在子shell上运行命令,因此,如果在其中定义变量,则该变量的值将丢失到外部。
j=1
: "$(j=2)"
echo "$j" # => 1
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句