Jenkins调用外部Shell脚本报错:文件或目录不存在
问题解决:Jenkins外部Shell脚本执行报错“No such file or directory”
问题根源
你出错的代码行存在语法错误:
res=$("test -f $path && echo '1' || echo '0' ")
$()是Shell的命令替换语法,作用是执行括号内的命令并返回输出结果,但你给括号内的内容套了双引号——这会让Shell把整个字符串test -f $path && echo '1' || echo '0'当成一个完整的可执行文件名去查找,而非解析里面的test命令与逻辑运算符,自然会触发“No such file or directory”错误。
另外,变量$path未用双引号包裹,若路径包含空格,也会导致test命令解析异常。
修复后的Shell脚本代码
去掉多余的双引号,同时给变量引用添加双引号避免空格问题:
#!/bin/bash basePath=$1 file=$2 path="$basePath/$file" res=$(test -f "$path" && echo '1' || echo '0') if [ "$res" == '1' ] then # 此处编写你的后续逻辑 echo "目标文件存在" fi
额外优化方案
其实无需先存储结果,可直接在if判断中使用test命令,代码更简洁:
#!/bin/bash basePath=$1 file=$2 path="$basePath/$file" # 写法1:使用test命令 if test -f "$path" then echo "目标文件存在" fi # 写法2:使用更简洁的[]语法 if [ -f "$path" ] then echo "目标文件存在" fi
内容的提问来源于stack exchange,提问作者user1298426
相关产品推荐
相关产品推荐

