zshrc にエイリアスが設定されており、sudo を使用してコマンドを再実行できます。
alias please='sudo $(fc -nl -1)'
「同様に、前のコマンドでワイルドカードを使用した場合を除いて、これはうまく機能します。rm*.o"、コマンドは"rm: '*.o' を削除できません: そのファイルまたはディレクトリがありません」。
このエイリアスがワイルドカードを正しく使用するための良い方法はありますか?
ベストアンサー1
いいえ、「正しいワイルドカードを使用するようにこのエイリアスを取得する」良い方法はありません。なぜなら、「正しい」は状況によって異なることを意味するからです。たとえば、コマンドラインにコマンド置換が含まれている場合は、rootとして追加のコマンドを実行する予定ですか?あなたが追求する自動化は、間違ったことをすばやく実行するのに非常に便利です。車を見るのはとても迷惑なので、道を渡るときに目を閉じるのと同じです。
私のアドバイスは、コマンドを入力しUp Home s u d o Spaceてしばらく時間をかけて再度読み、目的の操作が行われていることを確認することです。
つまり、冒険心が強ければ、コンピュータにその仕事をさせることもできます。何。これは異なるタスクを実行する2つのソリューションです。
次の関数は、前のコマンドが外部コマンドの呼び出しであると仮定します。同じパラメータを使用してsudo
プレフィックスを持つ外部コマンドを呼び出します。つまり、ワイルドカード拡張、変数置換、コマンド置換などがすべてシェルコンテキストで呼び出されます。
please () {
setopt local_options err_exit
local args
eval "args=($history[$((HISTCMD-1))])"
print -lr Running sudo "$args[@]"
sleep 2
sudo "$args[@]"
}
次のコマンドは、前のコマンドがシェル環境を変更せず、環境変数に依存しないと仮定します。ワイルドカード拡張、コマンド置換など、コマンドライン全体をrootとして実行します。
please () {
sudo zsh -c "$history[$HISTCMD]"
}