![使用之前运行的命令作为正确转义的参数](https://linux22.com/image/992423/%E4%BD%BF%E7%94%A8%E4%B9%8B%E5%89%8D%E8%BF%90%E8%A1%8C%E7%9A%84%E5%91%BD%E4%BB%A4%E4%BD%9C%E4%B8%BA%E6%AD%A3%E7%A1%AE%E8%BD%AC%E4%B9%89%E7%9A%84%E5%8F%82%E6%95%B0.png)
对我来说,一个常见的用例是在终端中运行一个命令,这个命令可能很长,包含管道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)