sudo
2つ欲しいです。 1)キャッシュされた資格情報を入力するたびに更新して定期的に使用し続ける場合は、パスワードを求めないでくださいsudo
。 2)(誰か)エイリアスを使用するときはsudoを使用できます。
資格情報を更新するには、このタスクを実行する必要がありますsudo -v
(コマンドは必要ありません)。
たとえば、私は/usr/bin/vi
1つ/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
これは、実際のコマンドにパスワードが必要でない場合に後者がパスワードを要求しないようにするためのものです。