! ! : 命令が見つかりません

! ! : 命令が見つかりません

最近、私は管理者としてコマンドを実行しないことに少しイライラして、次のものを使い始めました。sudo !!たくさん。私は使いやすさのためにffsこの行のエイリアスを作成することにしました。次の行を追加しました...

alias ffs="sudo !!"

私のため.zshrc

ただし、この機能を使用しようとすると、ffs端末に入るとエラーが発生します。

sudo: !!: command not found

エイリアスを使用して呼び出すと、コマンドが機能しないのはなぜですか?前のコマンドを再実行するのではなく、この問題を解決するにはどうすればよいですか?よろしくお願いします!

答え1

エイリアス拡張中は、履歴拡張は行われません。

ここでは、前のコマンドと同じコードを評価したいのですが、添付のエイリアスに引数として渡した内容を前に追加します(たとえば、など、目的の操作をsudo実行しない可能性があることに注意してください)。次のことができます。cmd1; cmd2for i (a b) echo $i

alias ffs='eval "sudo ${history[@]:0:1}"'

それとも動作させることができますが、sudo zsh -c <the-code-from-the-previous-command+your-args-appended>次のような場合は動作しません。echo $non_exported_variable

ffs() sudo zsh -c "${history[@]:0:1} ${(j[ ])@}"

特別な連想配列は、過去の$historyイベント番号を対応するコマンドラインにマップします。${array[@]:offset:length}また、最新アイテムから古いアイテムに拡張される点で特別です。したがって、上記のksh93スタイルを使用して値リストの最初の項目を取得すると、最新のイベントを取得できます${${history[@]}[1]}。 。

$(fc -nl -1)あるいは、それを使用して追加のプロセスをフォークすることもできます。

関連情報