在Linux上编写和测试的以下bash脚本在被调用时甚至无法在OS X上启动。
#!/bin/bash
#
# Some comments
#
#
function usage {
echo ""
echo "Usage: thisscript <SOURCE_DIRECTORY> <TARGET_DIRECTORY>"
echo ""
echo "<SOURCE_DIRECTORY> the directory where the this "
echo " directory resides (default is /usr/dis)"
echo ""
echo "<TARGET_DIRECTORY> the destination directory"
echo ""
}
function notDarwin {
mv -f $CUR_DIR/* $NEW_DIR/
ln -sf "$NEW_DIR/ee/sc/scrp" "/usr/bin/scrp"
ln -sf "$NEW_DIR/ee/etc/conffile.conf" "/etc/conffile.conf"
exit 0
}
function isDarwin {
mv -f $CUR_DIR/* $NEW_DIR/
ln -sf "$NEW_DIR/ee/sc/scrp" "/usr/local/bin/scrp"
cp "$NEW_DIR/ee/etc/conffile.conf" "/etc/conffile.conf"
exit 0
}
#
# =============================================
# ================== MAIN =====================
# =============================================
#
CUR_DIR=${1%/}
NEW_DIR=${2%/}
if [ ! -d "$CUR_DIR" ]; then
echo ""
echo "blah blah"
usage
exit 1
fi
if [ ! -d "$NEW_DIR" ]; then
echo ""
echo "The target directory supplied does not exist. Creating target directory $NEW_DIR"
mkdir "$NEW_DIR"
if [ $? -ne 0 ]; then
echo "Could not create target directory. Exiting..."
exit 1
else
echo "Directory $NEW_DIR created"
fi
echo ""
fi
UNAME=$(uname)
if [ $UNAME == "Darwin" ]; then
isDarwin
else
notDarwin
fi
sudo bash script.sh "arg1" "arg2"
在具有bash 3.2的macOS上运行时,它将引发以下语法错误
'script.sh: line 7: syntax error near unexpected token `{
'script.sh: line 7: `function usage {
我对OS X相当陌生,也许我缺少一个陷阱。该脚本在Linux上运行良好...
谢谢
Linux和现代OS X期望行以LF(换行)字符结尾。如果您的行以CR + LF结尾,那么您将遇到问题。
其他一些一般性指针:
该function
语法是非标准的。您应该使用所有POSIX兼容外壳程序都支持的标准语法:
改变:
function usage {
到:
usage() {
我怀疑一切都会好起来的。
顺便说一句,您应该引用所有参数扩展名(您错过了几个)。使用小写的变量名也被认为是一种好习惯,因为大写的变量名被shell使用,并且冒着与它们冲突的风险。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句