如何在LinuxBash中检查脚本文件是否存在并在一行程序中执行它

如何在LinuxBash中检查脚本文件是否存在并在一行程序中执行它,linux,bash,Linux,Bash,我在不同的目录中有很多脚本, 我想检查这些脚本文件是否存在,然后以最短的方式在一行中执行它们。 有一个简单的方法: if [ -f /A/B/C/foo.sh ]; then /A/B/C/foo.sh 我能缩短这一班轮吗 [ -f /A/B/C/foo.sh ] && /A/B/C/foo.sh &&是一个类似C的和。如果左侧的命令返回true,则执行右侧的命令 &&是一个类似C的和。如果左侧的命令返回true,请执行右侧的命令。是,可以使用速记格式进一步缩短: [ -f

我在不同的目录中有很多脚本, 我想检查这些脚本文件是否存在,然后以最短的方式在一行中执行它们。
有一个简单的方法:

if [ -f /A/B/C/foo.sh ]; then /A/B/C/foo.sh
我能缩短这一班轮吗

[ -f /A/B/C/foo.sh ] && /A/B/C/foo.sh
&&
是一个类似C的
。如果左侧的命令返回true,则执行右侧的命令


&&
是一个类似C的
。如果左侧的命令返回true,请执行右侧的命令。

是,可以使用速记格式进一步缩短:

[ -f /A/B/C/foo.sh ] && /A/B/C/foo.sh || echo "script not found"

是的,它可以用速记格式进一步缩短:

[ -f /A/B/C/foo.sh ] && /A/B/C/foo.sh || echo "script not found"

您可以使用如下函数:

run() { [[ -x $1 ]] && "$@"; }
然后将函数用作:

run '/A/B/C/foo.sh'
run '/A/B/C/bar.sh'

您可以使用如下函数:

run() { [[ -x $1 ]] && "$@"; }
然后将函数用作:

run '/A/B/C/foo.sh'
run '/A/B/C/bar.sh'
试试bash:

以及它的工作原理

$ cat src.sh
echo "Test test"

//if src.sh exist
$test -e src.sh && sh src.sh
Test test

// if not, src.sh not run
$test -e src1.sh && sh src.sh
试试bash:

以及它的工作原理

$ cat src.sh
echo "Test test"

//if src.sh exist
$test -e src.sh && sh src.sh
Test test

// if not, src.sh not run
$test -e src1.sh && sh src.sh
简单使用

/A/B/C/foo.sh
将检查此脚本文件是否存在,然后执行它。如果脚本不存在,它将报告

bash:/A/B/C/foo.sh:没有这样的文件或目录
或者,您可以使用以下命令抑制错误消息:

/A/B/C/foo.sh 2>/dev/null
正如其他人所建议的,您还可以使用

[-x/A/B/C/foo.sh]&&/A/B/C/foo.sh
注意
-x
而不是
-f
(测试文件是否可执行)

如果在不同的目录中有许多脚本,则可以使用以下一行程序执行它们:

用于f in/A/B/C/foo.sh/D/E/f/bar.sh;执行[-x“$f”]&&“f”;完成
只需使用

/A/B/C/foo.sh
将检查此脚本文件是否存在,然后执行它。如果脚本不存在,它将报告

bash:/A/B/C/foo.sh:没有这样的文件或目录
或者,您可以使用以下命令抑制错误消息:

/A/B/C/foo.sh 2>/dev/null
正如其他人所建议的,您还可以使用

[-x/A/B/C/foo.sh]&&/A/B/C/foo.sh
注意
-x
而不是
-f
(测试文件是否可执行)

如果在不同的目录中有许多脚本,则可以使用以下一行程序执行它们:

用于f in/A/B/C/foo.sh/D/E/f/bar.sh;执行[-x“$f”]&&“f”;完成

为什么要短一点?,“您拥有的是清晰的,正如预期的那样为什么要短一点?”,您拥有的是清晰的,正如预期的那样。如果。。。否则…
。签出。如果。。。否则…
。退房。我不想要第二个/A/B/C/foo。狗屎是一个基本命令。如果你找到一个解决这个问题的特殊命令,它基本上是一样的。我不想要第二个/a/B/C/foo。狗屎是一个基本命令。如果你找到一个特殊的命令来解决这个问题,那么它可能是基本相同的。