sudo bash関数の(一部)エイリアス拡張

sudo bash関数の(一部)エイリアス拡張

sudo2つ欲しいです。 1)キャッシュされた資格情報を入力するたびに更新して定期的に使用し続ける場合は、パスワードを求めないでくださいsudo。 2)(誰か)エイリアスを使用するときはsudoを使用できます。

資格情報を更新するには、このタスクを実行する必要がありますsudo -v(コマンドは必要ありません)。

たとえば、私は/usr/bin/vi1つ/usr/bin/nvimのエイリアスを持っています。

alias vi='/usr/bin/nvim'

したがって、root以外のユーザーとして入力すると、次のようになります。

sudo vi /etc/fstab

それから私は次を実行したいと思います。

sudo -v
sudo /usr/bin/nvim /etc/fstab

私はbash関数を生成してこれを達成しようとしました。

function sudo()
{
  command sudo -v
  command sudo "$@"
}

ただし、これによりエラーが発生します。

sudo: vi: command not found

つまり、エイリアスはvi関数内では"$@"拡張されませんsudo

この問題をどのように解決できますか?

ベストアンサー1

おそらく

function sudo()
{
  command sudo -v
  if [[ $(type -t "$1") == "alias" ]]; then
    set -- bash -ic "$(alias "$1"); $(printf "%q " "$@")"
  fi
  # what am I about to execute
  printf "%q " sudo "$@"; echo
  # and do it
  command sudo "$@"
}

おすすめ記事