TL; DR : 별명이 아닌 정의 된 함수sudo -i
를 실행하고 해당 파일에서 내 보낸 변수에 액세스 할 수 있습니다./root/.bashrc
sudo -i 명령 인수
그러나 별칭은 작동하지 않지만에 사용할 수있게하려면 함수로 쉽게 변환 할 수 있습니다 sudo -i
.
전체 분석 및 자세한 내용은 계속 읽으십시오.
여기에 몇 가지 문제가 있습니다. 일부는 sudo 작동 방식과 일부는 bash 자체 작동 방식에 있습니다 ...
기본적으로 sudo
명령 만 찾고 셸을 무시하므로 의 디렉토리 중 하나에 실행 파일이있는 sudo ll
경우에만 간단하게 실행 됩니다 . 따라서 별명 (또는 함수)을 사용하려면 프로세스의 일부로 쉘을 호출해야합니다.ll
$PATH
현대적인 (sudo 1.8.19p1에서 이것을 테스트하고 있습니다) 옵션 과 그 목적을 가지고 있지만 한 가지 방법은 sudo sh
또는 과 같은 것을 실행 하는 것입니다.sudo bash
sudo
-s
-i
따라서 한 시도는 sudo -s ll
( 당신이 언급 한 바에 근거한 Bash sudo bash -c 'll'
라고 가정 할 때 와 동일합니다 .)하지만 비 대화식으로 셸을 시작하기 때문에 작동하지 않습니다. 시작 파일을 읽지 않는 비 로그인 모드 쉘 스크립트를 작성 하여 실행 하는 것과 본질적으로 동일 합니다. 귀하 가 가진 별칭 및 기능 은 해당 스크립트에서 액세스 할 수 없습니다 ...$SHELL
rcfile
#!/bin/bash
~/.bashrc
다음은 -i
로그인 쉘을 만드는 옵션입니다. 시작 파일 을 읽으 므로 더 유망 합니다! 그러나 sudo -i ll
(와 동등한 sudo bash -l -c 'll'
)은 여전히 작동하지 않습니다. 그래서 어떻게이 가능하며, 주어진는 않았다 의 정의 읽어 ll
별칭을?
음, 여기에 다음 설명에 의해 시작이 쉘은 ... 즉, 기본적으로 bash는 쉘이 상호 작용하는 경우를 제외하고, 별칭을 확장 할 것이다 sudo -i
(또는 bash -l
)이되어 로그인 여전히 상호 작용하지 쉘,하지만.
그래서 다음 단계는 얻을 수 있습니다 대화 형 다음 쉘, 작동을 :
sudo bash -i -c 'll'
( 물론 로그인 과 대화식 이 모두 괜찮 bash -l -i -c ...
습니다.)
다른 대안은 로그인 셸 (비 대화식) 을 계속 사용 하지만 별칭을 확장하도록 명시 적으로 요청하는 것입니다.
sudo bash -l -O expand_aliases -c 'll'
bash가 대화 형 인 경우 초기화 셸을 읽을 수 있기 때문에 로그인 셸이 필요하지 않았지만 로그인 셸이 필요 -l
했습니다.
이것들은 상당히 긴 명령 줄입니다 ... 또한 전체 쉘 명령을 인용해야하므로 인수가있는 별칭을 호출하는 경우 모든 것을 문자열로 바꿔야합니다. 그래서 일종의 서투른 ...
이전에 별칭과 함수 에 대해 이야기했습니다 ... 함수는 실제로 여기에서 훨씬 더 편리하기 때문에 의도적이었습니다. 정의를 소싱하는 한 쉘에서 함수를 실행하기 위해 대화식 쉘을 가지고 있거나 특정 옵션을 설정하는 것과 같은 특별한 것은 필요하지 않습니다.
따라서 별칭 대신 함수ll
로 정의한 경우 sudo의 바로 가기 와 함께 직접 사용할 수 있습니다 .-i
sudo -i ll
그리고 더 긴 명령 줄이 있고 인수가 있으면 여기에도 직접 전달할 수 있습니다.
sudo -i ll -C -R /etc
(와 비교하십시오 sudo bash -i -c 'll -C -R /etc'
.)
함수는 또한 훨씬 유연하고 일반적으로 유지 관리하기가 쉽습니다 ... 일반적으로 별칭을 함수로 쉽게 변환 할 수 있습니다. 단 한 가지주의 할 점은 항상 "$@"
추가 인수가 필요한 위치 (일반적으로 별명.)
예를 들어이 별명은 다음과 같습니다.
alias ll='ls $LS_OPTIONS -l'
이 기능으로 전환 할 수 있습니다 :
ll () {
ls $LS_OPTIONS -l "$@"
}
대부분의 경우 동등합니다. 그리고 앞에서 언급했듯이이 기능은에서 직접 액세스 할 수 있어야 sudo -i
하므로 추가 보너스입니다.
이 답변과 설명이 도움이 되셨기를 바랍니다.
/root/.bashrc
하지만 실제로 Q가 따르는 것은이 파일의 별명입니다-이것은 unix.stackexchange.com/questions/1496/…에 따라 가능하지 않습니다 .