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、またはその他のシェルには、コマンド自体の中で置換ショートカットを使用する機能がありますか?

何かのようなもの

$> 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 による答えは、あなたが望むものです。

しかし、あなたの要件のために、利用可能なハック/誤用がもう 1 つあります。

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

例えば

sed -i.bak '' httpd.conf 

.bak が追加された別のファイルにファイルがコピーされます。

利点:/path/to/fileワイルドカード/グロブを含めることができるか、空白で区切られたファイルのリストを直接指定できます。

于 2013-10-18T14:06:44.773 に答える