sudo -i 명령이 현재 디렉토리를 변경하는 것을 방지하는 방법은 무엇입니까?

sudo -i 명령이 현재 디렉토리를 변경하는 것을 방지하는 방법은 무엇입니까?

sudo -i COMMANDCOMMAND루트 디렉터리에서 실행합니다 $HOME.

현재 디렉터리에서 스크립트를 실행하려고 하면 오류가 발생합니다.

$ sudo -i ./myscript.sh
-bash: ./myscript.sh: No such file or directory

내 경우에는 sudo -i 명령이 현재 디렉터리를 /root로 이동했기 때문에 /home/user/myscript.sh를 찾을 수 없습니다.

sudo -i명령이 현재 디렉터리를 유지하도록 하려면 어떻게 해야 합니까 ?

sudo다양한 환경 과 sudo -i이에 필요한 환경이 있습니다.sudo -i

답변1

디렉토리를 바꾸는 것은 그것의 일부입니다 sudo -i. 그러나 이전 위치로 돌아가서 다음 명령을 실행할 수 있습니다.

sudo -i sh -c "cd '$PWD'; ./myscript.sh"

$PWD작은따옴표가 포함되면 실패합니다. (반면에 만약 당신이알다 $PWD공백이나 셸에 특별한 내용을 포함하지 마세요. 작은따옴표도 제거할 수 있습니다. )

더 안전한 방법은 다음과 같습니다.

sudo -i sh -c 'cd "${1}"; ./myscript.sh' sh "$PWD"

( 사용자의 로그인 셸이 중간에 실행되어 또 다른 확장 라운드가 발생하기 때문에 일반 명령은 "$1"예상대로 작동하지 않습니다 . 이러한 확장을 방지하기 위해 명령을 이스케이프하려고 시도하지만 실패합니다 ( 등등).sudo -i$1$foo"sudo --login"에서 "sh -c"를 실행하면 위치 매개변수가 확장되지 않습니다. 해결책이 있나요?피투성이의 세부 사항을 얻으십시오. )


어쨌든 스크립트가 일반적으로 루트에 의해 실행되는 도구라면 루트가 있는 디렉터리에 스크립트를 넣는 것이 PATH합리적입니다 .그리고로만 쓸 수 있습니다 root. 일반적으로 루트가 아닌 사용자가 실행을 망칠 가능성을 피하는 것이 가장 좋지만, root일반 계정의 홈 디렉토리에 있는 경우 문제 가능성은 아마도 최소화될 것입니다.

답변2

sudo -i홈 디렉토리 변경을 방지하려면 이 -i플래그를 사용하지 마십시오.

sudo ./myscript.sh

sudo(참조 man sudo) 플래그 상태에 대한 문서 -i(강조)

-i,--login 대상 사용자의 비밀번호 데이터베이스 항목에 지정된 쉘을 로그인 쉘로 실행합니다. 이는 쉘이 .profile, 또는 와 같은 로그인별 리소스 파일을 읽는다는 것을 의미합니다 .bash_profile. .login[...]sudo쉘을 실행하기 전에 해당 사용자의 홈 디렉토리로 변경해 보십시오.이 명령은 사용자가 로그인할 때 받는 것과 유사한 환경에서 실행됩니다.

귀하의 질문은 스크립트를 실행하려면 루트 프로필이 필요하다는 내용으로 방금 편집되었습니다. 어떤 환경이 필요한지 모른 채 내가 제공할 수 있는 가장 가까운 것은 이것이다.

sudo -i "${PWD:-$(pwd)}/myscript.sh"

실제 위치 myscript.sh(예: 홈 디렉터리)를 알고 있다면 해당 위치를 직접 제공하는 것이 좋습니다.

sudo -i "$HOME/myscript.sh"

더 나은 옵션이 있을 수 있지만 설정해야 하는 환경에 대한 세부 정보를 제공해야 합니다.

관련 정보