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年代的计算机朋克技能。请帮助。
答案 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,或者您可以直接提供以空格分隔的文件列表。