쉘에 설정된 변수는 "bash -c 'command'"에서 읽혀지지 않습니다.

쉘에 설정된 변수는 "bash -c 'command'"에서 읽혀지지 않습니다.

입력하다:

sudo bash -c '>> /media/$USER/rootfs/etc/profile'

산출:

bash: /media/root/rootfs/etc/profile: No such file or directory

입력하다:

TEST=$USER
sudo bash -c '>> /media/$TEST/rootfs/etc/profile'

산출:

bash: /media//rootfs/etc/profile: No such file or directory

바꾸다:

/media/riccardo/rootfs/etc/profile

이 문제를 어떻게 해결할 수 있나요?

답변1

기본적으로 셸 변수는 셸에서 실행된 명령으로 내보내지지 않습니다.

다음을 사용하여 명시적으로 이 작업을 수행해야 합니다 export.

$ export test=foo
$ bash -c 'echo test=$test'
test=foo

sudo에 전달하기 전에 환경을 정리하는 것이 여전히 가능하므로 명령 bash줄 인수를 사용해야 할 수도 있습니다.

$ test=foobar 
$ sudo bash -c 'echo "$1"' sudo_bash "$test"
foobar

여기서는 필요하지 않습니다 export. 이는 sudo_bash내부 쉘의 "이름"으로 사용되는 문자열일 뿐이며, -c해당 문자열에 구문 오류가 있으면 이를 볼 수 있습니다.

또한보십시오:

답변2

인용 문제

sudo bash -c '>> /media/'"$USER"'/rootfs/etc/profile'
test=$USER
sudo bash -c '>> /media/'"$test"'/rootfs/etc/profile'

''따옴표는 리터럴 ""이며 따옴표를 사용하면 변수 확장이 가능합니다. 저는 둘 다 연결해서 사용해봤습니다. 그냥 사용해도 작동합니다 "".

관련 정보