0

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 年代的赛博朋克技能。请帮忙。

4

2 回答 2

3

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

那么这是您在超级用户中的解决方案

使用 bash历史扩展

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

其中!#:1:h的意思是:从您当前输入的行 ( !#) 中取出第一个单词 ( :1),然后仅从其中取出路径组件 ( :h-- 头部)。

于 2013-10-18T05:38:17.107 回答
0

justhalf 的答案就是你想要的。

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

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

例如

sed -i.bak '' httpd.conf 

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

优点:/path/to/file可以包含通配符/glob,也可以直接给出以空格分隔的文件列表。

于 2013-10-18T14:06:44.773 回答