インタラクティブシェルから呼び出されない限り、常にsudo Askpassを使用してください。

インタラクティブシェルから呼び出されない限り、常にsudo Askpassを使用してください。

私は見た既存の問題そのメモでは、答えは対話型シェルを混乱させ、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"

関連情報