쉘에 설정된 변수는 "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'

''따옴표는 리터럴이며, ""따옴표는 변수 확장을 허용합니다. 나는 둘 다 사용하여 함께 연결했습니다. .""

관련 정보