可以使用Bash History Expansion在同一命令中引用某些内容吗?

时间:2013-10-18 05:31:25

标签: linux bash shell

Bash有一个名为历史记录扩展的功能,你可以使用快捷方式扩展到你之前输入的bash中的内容。

示例:!! - expands into previous command

$> rm -f /var/log/access.log
rm: /var/log/access.log: Permission Denied
$> sudo !!
sudo rm -f /var/log/access.log
$> echo "i am teh hax"

另一个:!$ - expands into last arg of previous command

$> echo "no one was here" > access.log
$> cp !$ /var/log/
cp access.log /var/log/

bash或其他一些shell是否能够在命令本身中使用替换快捷方式?

这样的东西
$> cp httpd.conf !$.bak
cp httpd.conf httpd.conf.bak
$> echo "SABOTEUR!!!" > httpd.conf

我需要提高我1980年代的计算机朋克技能。请帮助。

2 个答案:

答案 0 :(得分:3)

在命令本身内,您的意思是想要引用httpd.conf吗?

然后这是superuser

中的解决方案

使用bash history expansion

mv path/to/oldfile !#:1:h/newfile

其中!#:1:h表示:从您当前正在键入的行(!#)开始,取第一个单词(:1),然后只选择路径组件{{1}来自它的头部。

答案 1 :(得分:0)

justhalf的答案就是你想要的。

但是根据您的要求,还有一次黑客/滥用可用。

sed -i.bak '' /path/to/file

e.g。

sed -i.bak '' httpd.conf 

它会将您的文件复制到附加了.bak的另一个文件。

优势:/path/to/file可以包含通配符/ globs,或者您可以直接提供以空格分隔的文件列表。