sudoは端末と競合しますが、.shファイルでは機能します。

sudoは端末と競合しますが、.shファイルでは機能します。

2021年12月24日更新

他の理由で再起動が発生する原因を見つけるには、許可された回答でコードを見つけてgrepする必要がありましたが、根本的な問題が見つかった場合はこの投稿を更新しますCtrlC

しかし、問題を解決するために、許可された回答の上書きされた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 *()' {} +

見つけたら、バグレポートを送信することをお勧めします。 (それがあなたに効果があると仮定した場合は、修正として私が提供したコードを提案してください。)

おすすめ記事