我的问题类似于注意这里的问题,但有点扭曲。我需要使用引号,这似乎被一个别名的手表剥去。
我希望运行监视自定义squeue命令:
$alias squeue_personal='squeue -o "%.18i %.9P %.8j %.8u %.216t %.10M %.6D %R %V %S %Z"'
$alias watch='watch ' 注: 根据另一个观察问题
但这个还是没用的。因为假名表去掉了报价:
Every 2.0s: squeue -o %.18i %.9P %.8j %.8u %.2t %.10M %.6D %R %V %S %Z Fri Jul 6 12:06:57 2018
squeue: error: Unrecognized option: %.9P
Usage: squeue [-A account] [--clusters names] [-i seconds] [--job jobid]
[-n name] [-o format] [-p partitions] [--qos qos]
[--reservation reservation] [--sort fields] [--start]
[--step step_id] [-t states] [-u user_name] [--usage]
[-L licenses] [-w nodes] [-ahjlrsv]如果我不使用化名,一切都会好的。例如,以下工作:
$watch 'squeue -o "%.18i %.9P %.8j %.8u %.2t %.10M %.6D %R %V %S %Z"'我确信这个解决方案是另一个手表问题的一些小问题,但我不知道是什么。
发布于 2018-07-06 15:22:12
watch将其命令行参数连接起来,用空格将它们连接起来,并将结果作为字符串传递给sh -c。所以watch ls -l "foo bar"和watch ls -l foo bar一样,squeue也有类似的问题。你有两个选择:
watch启动的shell添加显式引号。就像你在上一个例子中所做的那样。只是当你的别名展开时,双引号不会被引用。外部引号在定义别名时只引用它。当扩展别名时,它们不会在命令行上操作。所以,其中任何一种:观看尖叫-o‘%.18i %.9P %.8j %.8u %.2t %.10M %.6D %R %V %Z’手表尖叫-o \%.18i %.9P %.8j %.8u %.2t %.10M %.6D %R %V %Z\“别名手表=‘watch’别名sq='squeue -o‘%.18i %.9P %.8j %.8u %.8u%.8u%.%.6D %R %V %S %Z\“手表sq别名sq=\''squeue -o "%.18i %.9P %.8j %.8u %.10M %.6D %R %V %S %Z”‘>请注意:您可以使用set -x运行watch >/dev/null来查看shell实际运行的命令,如果引号实际上被传递给watch,您将在那里看到。watch跳过shell,直接运行命令。这样,单独的命令行参数保持独立。手册页:-x,--exec将命令传递给exec(2)而不是sh -c,这减少了使用额外引用来达到预期效果的需要。-x -o "%.18i %.9P %.8j %.8u %.2t %.10M %.6D %V %V %S %Z“别名-o =‘watch -x’别名sq='squeue -o‘%.18i %.9P %.8j %.8u %.216t %.10M %.6D %V %S %Z”watch x-o "%.18i %.9p%.9p%.8j%.8u%.216t%.10M%.6D %R %5%S%Zhttps://unix.stackexchange.com/questions/453858
复制相似问题