내 스크립트에서는 디렉터리를 만들고 해당 디렉터리에서 후속 명령을 실행해야 합니다.
아래 스크립트는 디렉터리를 생성하지만 이 스크립트가 호출하는 다음 스크립트( repo init
)는 해당 디렉터리에서 실행되지 않습니다.
mkcdir ()
{
echo "creating directory" $1
mkdir -p -- ~/"$1" &&
cd -P -- ~/"$1"
}
mkcdir $1
repo init -u [email protected]:P0/manifest.git -b refs/tags/$1
repo sync
답변1
귀하의 스크립트는 거의 정확합니다. 수정된 버전은 다음과 같습니다.
#!/usr/bin/env bash
mkcdir ()
{
echo "creating directory" "$1"
mkdir -p -- ~/"$1" &&
cd -P -- ~/"$1"
}
mkcdir "$1"
repo init -u [email protected]:P0/manifest.git -b refs/tags/"$1"
repo sync
$1
9행과 10행 주위에 큰따옴표가 있습니다. $1
이것이 없으면 토큰화가 발생하여 인수가 mkcdir
분할됩니다. 또한 4행에 따옴표를 추가했습니다. $1
나쁜 일은 일어나지 않지만( echo
결국 명령일 뿐이므로) 특정 확장 유형은 혼란을 야기할 수 있기 때문입니다. 예를 들어 $1
별표( *
)를 포함하면 현재 디렉터리의 모든 파일로 확장되며 이는 확실히 원하는 내용이 아닙니다.
그 외에 첫 번째 줄의 hashbang은 나쁜 생각은 아니지만, 특히 bash를 사용하는 경우에는 별 문제가 되지 않습니다.