使用之前运行的命令作为正确转义的参数

使用之前运行的命令作为正确转义的参数

对我来说,一个常见的用例是在终端中运行一个命令,这个命令可能很长,包含管道grep | awk | sort、各种引号' "、引号内的转义引号"\"somethings\""等。

但结果可能是我必须一次又一次地运行相同的命令。对于简单的命令,我使用watch如下命令

watch -n 5 'ls -l | wc -l'

但是如果命令很长并且包含引号,那么在传递给之前正确地转义所有内容就会变得非常繁琐且容易出错watch

如果有某种快捷方式或内置方法可以获取上一个命令的正确转义字符串就好了。有吗?我盲目地尝试了$ watch -n 5 !$watch -n 5 '!'但没用。

答案1

尽管 ,watch没有命令历史记录,但 shell 历史记录可用于此目的。 fc -nl -1允许列出 shell 执行的先前命令。可以执行

PCMD=`fc -nl -1`; watch -n 5 $PCMD

或者更短

watch -n 5 $(fc -nl -1)

例子,

$> stat /etc/passwd                                                                                           
  File: '/etc/passwd'
  Size: 2989        Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d  Inode: 6030444     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-06-17 20:45:17.520447811 -0600
Modify: 2016-06-17 20:45:17.520447811 -0600
Change: 2016-06-17 20:45:17.528447711 -0600
 Birth: -
$> watch -n 5 $(fc -nl -1)    

相关内容