sudo는 터미널과 충돌하지만 .sh 파일에서는 작동합니다.

sudo는 터미널과 충돌하지만 .sh 파일에서는 작동합니다.

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 *()' {} +

일단 찾으면 버그 보고서를 제출하는 것이 좋습니다. (그것이 당신에게 효과가 있다고 가정하면, 수정 사항으로 제가 제공한 코드를 제안해 주시기 바랍니다.)

관련 정보