watch-command-alias-expansion 并且需要使用引号

watch-command-alias-expansion 并且需要使用引号

我的问题类似于在这里观看问题但有一个转折。我需要使用引号,它似乎被别名手表剥夺了。

我想在自定义 slurm squeue 命令上运行 watch:

$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"'

我确信解决方案是一些小改动另一个手表问题但我不知道是什么。

答案1

watch连接其命令行参数,用空格将它们连接起来,并将结果作为字符串传递给sh -c.因此watch ls -l "foo bar"变得与 相同watch ls -l foo bar,并且您会遇到类似的问题squeue。你有两个选择:

  1. 为启动的 shell 添加显式引号watch。正如您在上一个示例中实际所做的那样。只是当您的别名扩展时,双引号不会被引用。外部引号仅在定义别名时引用它。当别名展开时,它们不会在命令行上起作用。

    因此,其中任何一个:

    watch squeue -o '"%.18i %.9P %.8j %.8u %.2t %.10M %.6D %R    %V   %S  %Z"'
    
    watch squeue -o \"%.18i %.9P %.8j %.8u %.2t %.10M %.6D %R    %V   %S  %Z\"
    
    alias watch='watch '
    alias sq='squeue -o \"%.18i %.9P %.8j %.8u %.2t %.10M %.6D %R    %V   %S  %Z\"'
    watch sq
    
    alias sq=\''squeue -o "%.18i %.9P %.8j %.8u %.2t %.10M %.6D %R    %V   %S  %Z"'\'
    watch sq
    

    笔记:您可以使用set -x并运行watch >/dev/null来查看 shell 实际运行的命令,您将看到引号是否实际传递到watch.

  2. 告诉watch跳过 shell,直接运行命令。这样,单独的命令行参数就保持独立。手册页:

    -x,--exec
    将命令传递给exec(2)而不是sh -c减少使用额外引用来获得所需效果的需要。

    watch -x squeue -o "%.18i %.9P %.8j %.8u %.2t %.10M %.6D %R    %V   %S  %Z"
    
    alias watchx='watch -x '
    alias sq='squeue -o "%.18i %.9P %.8j %.8u %.216t %.10M %.6D %R    %V   %S  %Z"'
    watchx sq
    

相关内容