最近、私は管理者としてコマンドを実行しないことに少しイライラして、次のものを使い始めました。sudo !!
たくさん。私は使いやすさのためにffs
この行のエイリアスを作成することにしました。次の行を追加しました...
alias ffs="sudo !!"
私のため.zshrc
。
ただし、この機能を使用しようとすると、ffs
端末に入るとエラーが発生します。
sudo: !!: command not found
エイリアスを使用して呼び出すと、コマンドが機能しないのはなぜですか?前のコマンドを再実行するのではなく、この問題を解決するにはどうすればよいですか?よろしくお願いします!
答え1
エイリアス拡張中は、履歴拡張は行われません。
ここでは、前のコマンドと同じコードを評価したいのですが、添付のエイリアスに引数として渡した内容を前に追加します(たとえば、など、目的の操作をsudo
実行しない可能性があることに注意してください)。次のことができます。cmd1; cmd2
for 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)
あるいは、それを使用して追加のプロセスをフォークすることもできます。