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 "$@"
}

答え2

Camilleのalias sudo='sudo -v; sudo '答えは、sudoがエイリアスの場合、sudoの後の最初の単語を拡張するGlennの答えと同じように有効ですが、エイリアスを「盲目的に」拡張することはセキュリティ上の問題と見なすことができます。

指定visudo可能な構成

/etc/sudoers:

Defaults editor=/usr/bin/nvim, !env_editor

EDITOR環境変数(やはりセキュリティリスク)を無視し、常にオンになって/etc/sudoersいるか、次のbash機能を使用できます(エディタで入力するの/usr/bin/nvimに慣れていると仮定)。vi

~/.bashrc:

sudo ()
{ 
    command sudo -nv 2> /dev/null;
    COMMAND="$1";
    shift;
    [ "$COMMAND" = "vi" ] && COMMAND="/usr/bin/nvim";
    command sudo "$COMMAND" "$@"
}

これも可能です

sudo vi /etc/fstab

ただし、常に/usr/bin/nvimエイリアスを拡張せずに使用してください。

またsudo -nv対。sudo -vこれは、実際のコマンドにパスワードが必要でない場合に後者がパスワードを要求しないようにするためのものです。

関連情報