1

在 (ba)sh 脚本中,如何忽略 file-not-found 错误?

我正在编写一个从标准输入读取(部分)文件名的脚本,使用:

read file; $FILEDIR/$file.sh

我需要提供脚本功能来拒绝不存在的文件名。

例如

$UTILDIR不包含script.sh 用户类型脚本
脚本尝试访问$UTILDIR/script.sh并失败为

./run.sh: line 32: /utiltest/script.sh: No such file or directory

如何使脚本打印错误,但继续脚本而不打印“正常”错误?

4

4 回答 4

2
if [ -e $FILEDIR/$file.sh ]; then
 echo file exists;
else
 echo file does not exist;
fi
于 2012-04-15T00:48:03.517 回答
2

您可以使用@gogaman 的答案中的代码测试文件是否存在,但您可能更想知道文件是否存在和可执行。为此,您应该使用-x测试而不是-e

if [ -x "$FILEDIR/$file.sh" ]; then
   echo file exists
else
   echo file does not exist or is not executable
fi
于 2012-04-15T00:55:02.120 回答
1

根据您对脚本所做的操作,该命令将失败并显示特定的退出代码。如果您正在执行脚本,则退出代码可以是 126(权限被拒绝)或 127(未找到文件)。

command
if (($? == 126 || $? == 127))
then
  echo 'Command not found or not executable' > /dev/stderr
fi
于 2012-04-15T01:19:00.990 回答
1

在这里,我们可以定义一个仅在文件存在时运行的 shell 过程

run-if-present () {
  echo $1 is really there
}

[ -e $thefile ] && run-if-present $thefile
于 2012-04-15T00:57:42.333 回答