다른 스크립트를 생성하기 위해 2개의 매개변수를 사용하는 스크립트를 생성하고 싶습니다. 두 번째 스크립트는 자체 매개변수를 사용해야 합니다. 내가 계속 겪고 있는 문제는 마지막 에코가 첫 번째 스크립트의 인수를 두 번째 스크립트에 넣는다는 것입니다. 그렇다면 두 번째 스크립트에서 매개변수를 허용하려면 어떻게 해야 할까요? 이 작업을 수행하는 방법을 알고 싶습니다. 이것이 첫 번째 스크립트입니다.
#! /bin/bash
MY_FILE=$1
MY_PATH=$2
touch $MY_PATH/$MY_FILE
echo "#! /bin/bash" > $MY_FILE
echo "ps -u $1 -o comm=CMD -o pid,ppid,user,uid,gid" >> $MY_FILE
답변1
Bash 쉘 매뉴얼을 읽으면 큰 따옴표는 따옴표 안의 문자 값을 그대로 유지합니다.와는 별개로"$", "`" 및 "\"의 경우. 따라서 $1
두 번째 스크립트에서 "$1"이라는 텍스트를 인쇄하는 대신 작성한 줄이 첫 번째 스크립트의 첫 번째 매개변수로 대체됩니다 . 나는 당신이 원하는 것이 다음과 같다고 믿습니다.
#! /bin/bash
MY_FILE=$1
MY_PATH=$2
touch "$MY_PATH"/"$MY_FILE"
echo "#! /bin/bash" > "$MY_FILE"
echo `ps -u $1 -o comm=CMD -o pid,ppid,user,uid,gid` >> "$MY_FILE"
또한 변수 확장 주위에 큰따옴표를 추가했습니다 "$MY_FILE"
. 이는 저장된 문자열에 공백이 포함된 경우 혼동을 피하기 위한 것입니다.
그러나 여기서 달성하려는 목표를 이해하지 못한다고 말해야 합니다.
a) 두 번째 스크립트에 인쇄하는 명령은 첫 번째 스크립트의 인수에 의존하지 않습니다(이 경우 두 번째 스크립트를 복사해야 하는 경우 간단히 복사하면 됩니다).
b) 해당 호출에 변수를 포함 하지 않기 때문에 터치하고 있는 파일이 touch "$MY_PATH"/"$MY_FILE"
다른 명령을 인쇄하는 파일과 완전히 다를 수 있습니다. "$MY_PATH"
아마도 이는 예상된 동작이지만 조금 이상해 보입니다.
답변2
echo 'ps -u $1 -o comm=CMD -o pid,ppid,user,uid,gid' >> $MY_FILE
일반적으로 다음 문서를 사용하여 스크립트를 생성하는 것이 더 쉬울 수 있습니다.
cat <<"EOT" >"$MY_FILE"
#! /bin/bash
ps -u $1 -o comm=CMD -o pid,ppid,user,uid,gid
EOT
주변 따옴표로 인해 EOT
아무것도 확장되지 않습니다 .