sudo -i COMMAND
COMMAND
루트 디렉터리에서 실행합니다 $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"
더 나은 옵션이 있을 수 있지만 설정해야 하는 환경에 대한 세부 정보를 제공해야 합니다.