我想知道在bash中是否有一种更简单的方式,只有当存在该脚本时才执行脚本。我的目标是相当于:
if [ -x $name ]
then
$name
fi
或者[ -x $name ] && $name
我正在寻找的是类似于什么样的东西。exec_if_exist $name
有没有一种方法可以在bash中简化这个过程?我不想使用函数或“推测性”执行,因为这会导致“命令未找到”的错误。
最佳方案
我想知道在bash中是否有一种更简单的方式,只有当存在该脚本时才执行脚本。我的目标是相当于:
if [ -x $name ]
then
$name
fi
或者[ -x $name ] && $name
我正在寻找的是类似于什么样的东西。exec_if_exist $name
有没有一种方法可以在bash中简化这个过程?我不想使用函数或“推测性”执行,因为这会导致“命令未找到”的错误。
最佳方案
使用 type
命令可以使它变得更简单。在进行测试时,需要输入文件的完整路径或相对路径。而使用 type
命令,则会搜索环境变量中的 PATH。
type $name && $name
这样做的好处在于,成功的信息会被输出到标准输出(STDOUT),而错误信息则会输出到标准错误输出(STDERR),让你完全控制输出内容。
# mute success
type >/dev/null
# mute fail
type 2>/dev/null
# mute both
type &>/dev/null
exec_if_exist() {
test -x $1 && $1
}
而在调用$1时,可能需要考虑路径。
type
在OS X上似乎并不总是有效。有效的方法是:
kind
which -s command && command
rm
命令一样删除文件,如果存在的话,就像rm -f script.sh
对吧?在你的情况下,你想要执行它。 - Jayesh Bhoi