私のスクリプトでは、ディレクトリを作成し、そのディレクトリから後続のコマンドを実行する必要があります。
以下のスクリプトはディレクトリを生成しますが、このスクリプトが呼び出す次のスクリプト(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を使用している場合はあまり問題になりません。