스크립트에서 sudo 상호 작용 후 새 사용자에 대한 별칭 추가

스크립트에서 sudo 상호 작용 후 새 사용자에 대한 별칭 추가

나는 다음의 지시를 따랐다.https://stackoverflow.com/questions/2135644/how-can-i-define-a-bash-alias-as-a-sequence-of-multiple-commands내 자신의 bash 스크립트를 만듭니다. 다음과 같이:

sudo -u otheruser -i
alias cd1="cd /dir/one/"
alias cd2="cd /dir/two/"

나는 이러한 별칭을 사용할 수 있기를 원합니다 otheruser. 내 목표는 실행 파일로 실행하는 것이지만 테스트를 위해 소스를 제공하고 있습니다(문제를 피하기 위해).https://stackoverflow.com/questions/2197461/how-to-set-an-alias-inside-a-bash-shell-script-so-that-is-it-visible-from-the-ou) 좋다 source ./myscript.

이 작업을 수행하는 경우에도 sudo는 작동하지만 다음 별칭은 작동하지 않습니다( 의 경우 otheruser). 새 사용자가 아닌 이 명령을 호출하는 사용자에게 별칭을 적용해야 한다고 생각하십니까? 아니면 다른 사용자에게 sudo를 수행한 후 스크립트의 명령을 무시하는 규칙이 있습니까?

답변1

작동하지 않는다고 생각하는 이유는 이 두 alias명령이 bash세션 시작이 완료된 sudo후에 실행 되기 때문입니다. 이것을 테스트할 수 있습니다 - 스크립트 소스를 얻고, 새 세션이 시작될 때 누르고 Ctrl유지 d한 다음 원래 쉘 유형에서:

$ type cd1
cd1 is aliased to `cd /dir/one/'
$ type cd2
cd2 is aliased to `cd /dir/two/'

나는 당신이 원하는 것을 얻을 수 있습니다expect스크립트이지만 저는 이에 대한 전문가가 아니므로 비판을 환영합니다.

#!/usr/bin/expect -f

spawn sudo -u otheruser -i
send "alias cd1='cd /dir/one/'"
send "\n"
send "alias cd2='cd /dir/two/'"
send "\n"

interact

expect이 스크립트를 실행하기 전에 실제로 설치되어 있는지 확인하십시오.

시스템의 패키지 관리자를 사용하여 설치할 수도 있습니다(필수) expect. tcl수동으로 설치해야 하는 경우 Expect의 지침을 참조하세요.http://expect.sourceforge.net/. Expect의 README/INSTALL 파일은 Tcl을 얻기 위한 일부 위치를 가리키고 있지만 이러한 위치는 오래된 것 같습니다. 그러나 ActiveState에서 Tcl의 복사본을 얻을 수 있습니다.

관련 정보