Macos OSX中的bash语法错误
下面的bash脚本是在Linux上编写和测试的,当被调用时,它甚至不会在osx上启动Macos OSX中的bash语法错误,macos,bash,Macos,Bash,下面的bash脚本是在Linux上编写和测试的,当被调用时,它甚至不会在osx上启动 #!/bin/bash # # Some comments # # function usage { echo "" echo "Usage: thisscript <SOURCE_DIRECTORY> <TARGET_DIRECTORY>" echo "" echo "<SOURCE_DIRECTORY> the directory
#!/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
我对OSX还比较陌生,也许我错过了一个好机会。脚本在Linux上运行良好
感谢您,Linux和现代OS X希望行以LF(换行符)字符结尾。如果您的线路以CR+LF结尾,那么您将遇到问题
其他一些通用指针:
函数
语法是非标准的。您应该使用所有POSIX兼容shell支持的标准语法:
更改:
function usage {
致:
我怀疑一切都会好起来的
另一方面,您应该引用所有的参数展开式(您错过了几个)。使用小写变量名也被认为是一种良好的做法,因为shell使用大写变量名,您可能会与它们发生冲突。也尝试过,但没有帮助…:/错误现在转到
第7行:用法(){
我看不到任何其他可能导致脚本出现问题的内容。老实说,函数
语法应该在任何一种平台上的bash中都得到支持…也许这是换行符的问题?不知道,我检查了脚本,它的每一行都有CR和LF…我将文件传输到windows并使用记事本++此外,我在另一台Mac电脑上运行了脚本,同样的错误…让我困惑me@Dragan它不应该两者都有;在现代OS X上它应该只有LF。很明显,您的行尾字符有问题!您有LF/CR行尾。使用编辑器的选项将文件保存为Unix行尾。请参阅,尤其是e第一点:检查脚本或数据是否具有DOS样式的行尾字符。
function usage {
usage() {