如何在bash中只有存在脚本时才执行脚本?

17

我想知道在bash中是否有一种更简单的方式,只有当存在该脚本时才执行脚本。我的目标是相当于:

if [ -x $name ]
then
  $name
fi
或者
[ -x $name ] && $name
我正在寻找的是类似于什么样的东西。
exec_if_exist $name

有没有一种方法可以在bash中简化这个过程?我不想使用函数或“推测性”执行,因为这会导致“命令未找到”的错误。

最佳方案


所以你想要像 rm 命令一样删除文件,如果存在的话,就像 rm -f script.sh 对吧?在你的情况下,你想要执行它。 - Jayesh Bhoi
1
我想到了更简单的方法:test -x $name && $_。 - Jaro
3个回答

9

使用 type 命令可以使它变得更简单。在进行测试时,需要输入文件的完整路径或相对路径。而使用 type 命令,则会搜索环境变量中的 PATH。

type $name && $name

这样做的好处在于,成功的信息会被输出到标准输出(STDOUT),而错误信息则会输出到标准错误输出(STDERR),让你完全控制输出内容。

# mute success
type >/dev/null
# mute fail
type 2>/dev/null
# mute both
type &>/dev/null

4
为什么不呢?
exec_if_exist() {
    test -x $1 && $1
}

而在调用$1时,可能需要考虑路径。


我不需要一个函数,因为我需要在某个地方定义它并稍后处理(例如源代码)。谢谢。 - Jaro
1
嗨,再次见到你,谢谢。我找到了一个更简单的形式:test -x $name && $_。这对我有效! - Jaro

2

type 在OS X上似乎并不总是有效。有效的方法是:

kind

which -s command && command

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接