我有2个shell脚本和2个mpkg安装程序,我试图使用unix可激发文件来运行它们。这是我的脚本,但它总是有错误消息“没有这样的文件或目录”?
#!/bin/sh
# Find the absolute script current path
path=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
sudo sh $path/join.sh
sudo sh $path/join2.sh
#/usr/sbin/installer -dumplog -verbose -pkg $path/“esetv8.mpkg" -target /
#/usr/sbin/installer -dumplog -verbose -pkg $path/“sccm.mpkg” -target /
exit 0非常感谢!
发布于 2015-06-22 22:27:12
在处理包含目录和文件路径的变量时,最常见的问题是特殊字符(如空格)的存在。为了正确地处理这些问题,您应该始终使用双引号引用变量。因此,更好的代码是:
sudo sh "$path/join.sh"
sudo sh "$path/join2.sh"还建议使用大括号包装变量,这也有助于避免不必要的问题。因此产生了以下代码:
sudo sh "${path}/join.sh"
sudo sh "${path}/join2.sh"虽然这应该有效,但也应该提到,建议在执行文件之前检查文件是否实际存在。可以使用-f检查文件是否存在,使用-x检查执行权限。适当的守则如下:
[ -f "${path}/join.sh" ] && [ -x "${path}/join.sh" ] && sudo sh "${path}/join.sh"
[ -f "${path}/join2.sh" ] && [ -x "${path}/join2.sh" ] && sudo sh "${path}/join2.sh"注意,如果您有一堆这样的代码,最好使用for循环来执行它们。还请注意,-f在检查-x时变得多余,因此更好的代码如下:
[ -x "${path}/join.sh" ] && sudo sh "${path}/join.sh"
[ -x "${path}/join2.sh" ] && sudo sh "${path}/join2.sh"https://stackoverflow.com/questions/30990479
复制相似问题