zsh fcコマンドでワイルドカードを使用する

zsh fcコマンドでワイルドカードを使用する

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]"
}

おすすめ記事