使用Unix可执行文件运行Shell脚本和MPKG文件

时间:2015-06-22 21:53:17

标签: macos shell unix

我有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

非常感谢!

1 个答案:

答案 0 :(得分:1)

处理包含目录和文件路径的变量时,最常见的问题是存在特殊字符,例如空格。要正确处理这些,您应该始终使用双引号引用变量。因此,更好的代码是:

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"