2013-10-18 13 views
0

Bash具有稱爲歷史擴展的這種功能,您可以使用快捷方式將之前輸入的內容擴展到bash中。可以使用Bash History Expansion來引用同一命令中的某些內容嗎?

實施例:!! - 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中,或一些其他的外殼,必須使用命令本身內取代的快捷方式的能力?

喜歡的東西

$> cp httpd.conf !$.bak 
cp httpd.conf httpd.conf.bak 
$> echo "SABOTEUR!!!" > httpd.conf 

我需要我的1980年的龐克技能。請幫忙。

回答

3

通過指令本身,你的意思是你想指的是httpd.conf

那麼這是superuser

您的解決方案使用bash history expansion

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

其中!#:1:h是指:從您目前鍵入線(!#),採取的第一個字(:1)然後只取其路徑組件(:h - 頭部)。

0

justhalf的答案就是你想要的。

但是,對於您的要求,還有一個黑客/濫用可用。

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

例如,

sed -i.bak '' httpd.conf 

它會將您的文件複製到另一個附加.bak文件。

優點:/path/to/file可以包含通配符/球體,或者您可以直接給出空格分隔的文件列表。

相關問題