在我的脚本中,我创建一个目录,并需要在该目录中执行后续命令。
下面的脚本创建一个目录,但它调用的下一个脚本 ( 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。