매개변수를 사용하여 다른 스크립트를 생성하는 스크립트 작성

매개변수를 사용하여 다른 스크립트를 생성하는 스크립트 작성

다른 스크립트를 생성하기 위해 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아무것도 확장되지 않습니다 .

관련 정보