su - bash 명령에 변수를 추가하는 방법

su - bash 명령에 변수를 추가하는 방법

저는 다른 사용자를 대신하여 일부 매개변수화된 명령을 실행해야 하는 루트로 실행되는 간단한 스크립트를 작성하고 있습니다.

예를 들어, 아래 예시에서는 "VER" 변수에서 얻은 버전을 이용하여 디렉터리를 생성하고 싶은데, 아무리 해도 실행이 되지 않습니다.. VER 변수 값이 VER 변수 값으로 전달되지 않고 있습니다. 명령이 올바르게 실행되었습니다(명령어를 따옴표 등으로 묶는 등의 이중 사용을 시도했습니다).

VER='10.2.1'
su - other_user -c 'mkdir -p /home/other_user/$VER'

이것을 달성하는 방법에 대한 아이디어가 있습니까?

답변1

실행된 명령에 변수를 전달하는 것은 su -c변수를 스크립트에 전달하는 것과 같습니다:sh -cbash -c

su other_user -c 'mkdir -p "/home/other_user/$1"' sh "$VER"

이 두 매개변수 sh및 는 각각 (오류 메시지에서 쉘이 사용하는) 및 로 시작하는 쉘에 전달됩니다 "$VER".su$0$1

관련된:

답변2

큰 따옴표가 트릭을 수행해야 합니다. 당연히 패해야 합니다 echo.

steve@DESKTOP-E197DDI:~$ VER='10.2.1'
steve@DESKTOP-E197DDI:~$ su - steve -c "echo mkdir -p /home/other_user/$VER"
Password:
mkdir -p /home/other_user/10.2.1
steve@DESKTOP-E197DDI:~$

관련 정보