首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Unix可执行文件运行Shell脚本和MPKG文件

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

Stack Overflow用户
提问于 2015-06-22 21:53:16
回答 1查看 115关注 0票数 1

我有2个shell脚本和2个mpkg安装程序,我试图使用unix可激发文件来运行它们。这是我的脚本,但它总是有错误消息“没有这样的文件或目录”?

代码语言:javascript
复制
#!/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

非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-22 22:27:12

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

代码语言:javascript
复制
sudo sh "$path/join.sh"
sudo sh "$path/join2.sh"

还建议使用大括号包装变量,这也有助于避免不必要的问题。因此产生了以下代码:

代码语言:javascript
复制
sudo sh "${path}/join.sh"
sudo sh "${path}/join2.sh"

虽然这应该有效,但也应该提到,建议在执行文件之前检查文件是否实际存在。可以使用-f检查文件是否存在,使用-x检查执行权限。适当的守则如下:

代码语言:javascript
复制
[ -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时变得多余,因此更好的代码如下:

代码语言:javascript
复制
[ -x "${path}/join.sh" ] && sudo sh "${path}/join.sh"
[ -x "${path}/join2.sh" ] && sudo sh "${path}/join2.sh"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30990479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档