
2021年12月24日更新
他の理由で再起動が発生する原因を見つけるには、許可された回答でコードを見つけてgrepする必要がありましたが、根本的な問題が見つかった場合はこの投稿を更新しますCtrl。C
しかし、問題を解決するために、許可された回答の上書きされたsudoコードを使用し、競合なしでsudoを実行できます。
したがって、ソースの問題を見つける前に問題が発生する可能性がある他の人のために私がしたことは次のとおりです。
.bashrc
私の.bashrcファイルの下部
# https://unix.stackexchange.com/a/683619/344030
if [ -f ~/.sudo-fix ]; then
source ~/.sudo-fix
else
echo '
答え1
だから私たちは確認済みなぜsudo
正しく機能しないのですか?これがsudo
やろうとしているのは、引数なしでソロをオーバーライドするようです。つまり、入力した最後のコマンドをsudo
接頭辞で繰り返すという意味です。
賢明なアイデアだが実装が悪い - 引用されていないコンテンツ$@
〜しなければならない二重引用符で囲むと正常に機能し、再帰を防ぐために、コマンドsudo
を関数自体ではなく関数内で使用する必要があります。
# Redefine sudo to reuse the last command if no args
sudo() {
if [ $# -gt 0 ]
then command sudo "$@"
else command sudo "${BASH:-bash}" -c "$(history -p '!!')"
fi
}
今、それが定義された場所を見つけるのが難しくなります。このコマンドは良い開始点になります(私が想定している再帰コマンドと似ていますgrep
が、関数名と関数名の間のスペースを()
オプションとして受け入れ、関連性のないディレクトリを除外します)。
command sudo find / \( -path '/dev' -o -path '/proc' -o -path '/run' -o -path 'sys' \) -prune -o -type f -exec grep -l 'sudo *()' {} +
見つけたら、バグレポートを送信することをお勧めします。 (それがあなたに効果があると仮定した場合は、修正として私が提供したコードを提案してください。)