You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash的if条件中带参数调用外部脚本并解决命令找不到报错

问题解决方案

IsArchive: command not found报错的核心原因是Bash执行主脚本时,未在系统命令搜索路径(PATH)中找到对应可执行文件,同时你编写的IsArchive脚本本身也存在独立执行的语法兼容问题,具体解决方法可从以下两种方案中二选一:

方案1:作为独立外部脚本调用

  • 修正IsArchive脚本的退出逻辑:return语法仅可用于Shell函数或被导入(source)的脚本,独立执行的脚本需要用exit返回状态码,修正后代码如下:
#!/bin/bash
STR="$1"

if [[ "$STR" ==  *".zip"* ]] || [[ "$STR" ==  *".iso"* ]] || [[ "$STR" ==  *".tar.gxz"* ]] || [[ "$STR" ==  *".tar.gx"* ]] || [[ "$STR" ==  *".tar.bz2"* ]] || \
   [[ "$STR" ==  *".tar.gz"* ]] || [[ "$STR" ==  *".tar.xz"* ]] || [[ "$STR" ==  *".tgz"* ]] || [[ "$STR" ==  *".tbz2"* ]]
then
        exit 0
else 
        exit 1
fi
  • 给IsArchive添加可执行权限,执行命令:chmod +x 你的IsArchive文件实际路径,若两个脚本放在同一目录,可直接执行chmod +x ./IsArchive
  • 主脚本调用时填写IsArchive的完整路径,同目录下修改示例如下:
elif [[ $Option = "2" ]]
then
                if ./IsArchive "$SourcePath";
                then
                        less -1Ras "$SourcePath" | tee "$OutputFilePath"

                # 如果文件不是归档格式
                else
                        ls -1Rasl "$SourcePath" | tee "$OutputFilePath"
                fi

如果IsArchive存放在固定目录,也可以直接写绝对路径调用,例如if /opt/scripts/IsArchive "$SourcePath";

方案2:作为功能片段导入主脚本调用

如果不想每次调用都写全路径,可将IsArchive脚本内容导入主脚本的执行环境,此时原有return语法无需修改:

  • 在主脚本开头、调用IsArchive之前的任意位置添加导入语句:
# 替换为IsArchive的实际路径
source ./IsArchive
# 也可以写为. ./IsArchive,和source命令效果完全一致
  • 无需修改原有调用逻辑,直接使用if IsArchive "$SourcePath";即可正常运行

内容的提问来源于stack exchange,提问作者ma yoko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 07:42:01