私は見た既存の問題そのメモでは、答えは対話型シェルを混乱させ、exec()または同様のものを使用するアプリケーションでは機能しないエイリアスの使用のみを指定します。アップグレードが難しくなるので、sudo実行可能ファイルを/usr/binに移動したくありませんが、他の方法はわかりません。また、シェルスクリプトから呼び出すときにAskpassを使用したいと思います。
答え1
次の場合に確認できます。現在のbashインスタンスは対話型です。。ただし、これは他のシェルでは機能しない可能性があります。
エージェントスクリプトを作成すると、起動方法に関する決定をカプセル化できますsudo
。名前を付けてくださいsudoAskpass.sh
。たとえば、次のようになります。
#!/bin/bash
BASH_PARAMETERS="$1"
shift
case "${BASH_PARAMETERS}" in
*i*)
sudo -A "$@"
;;
*)
sudo "$@"
;;
esac
exit $?
sudo
それにもかかわらず、スクリプトでは、パラメータは非対話型シェルを$-
表すため、エイリアスが必要です。
alias sudo='/path/to/sudoAskpass.sh "$-"'
答え2
私はそれを行う方法を見つけました。まず、次の内容でパスのsudo
前のどこかに呼び出されるスクリプトを作成します。/usr/bin
#!/bin/bash
/usr/bin/sudo -A "$@"
これは引数を実際のsudoに渡しますが、-A引数が追加されます。次に(またはシェルのシステム全体のrcファイル)、エイリアスを/etc/zshrc
元のsudoにリセットします。
alias sudo="/usr/bin/sudo"