나는 다음의 지시를 따랐다.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의 복사본을 얻을 수 있습니다.