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

Unix系统下脚本与目标文件不在同目录时使用ls命令报错如何解决

你传入的URLS是相对路径,系统执行脚本时会以你当前所在的工作目录(也就是PROGRAMME文件夹)为基准查找该路径,而URLS文件夹和PROGRAMME文件夹是同级的主文件夹子目录,并不在PROGRAMME内部,因此触发找不到路径的报错。

解决方案

方法1:调整执行时传入的路径参数

执行脚本时传入上级目录指向的相对路径即可,命令如下:
bash <脚本文件名.sh> ../URLS ../TABLEAUX
其中../代表当前工作目录的上级目录,也就是你存放三个子文件夹的主目录,通过该前缀即可定位到同级的URLS和TABLEAUX文件夹。

方法2:使用绝对路径传入参数

直接给两个文件夹的完整绝对路径,不受当前执行目录影响,示例如下(请替换为你自己的实际主目录路径):
bash <脚本文件名.sh> /home/你的用户名/主文件夹名称/URLS /home/你的用户名/主文件夹名称/TABLEAUX

方法3:脚本内部固化路径定位(可选优化)

如果不想每次手动调整路径参数,可以在脚本开头先自动定位到正确的目录,同时优化遍历写法避免特殊文件名报错,修改后的代码示例如下:

# 命令说明:bash <脚本文件名.sh> (不需要额外传路径参数)
# 自动切换到脚本本身所在的PROGRAMME目录
cd "$(dirname "$0")" || exit 1
# 直接指向同级的目标子目录
dossier_url=../URLS
dossier_tableaux=../TABLEAUX

echo $dossier_url
echo $dossier_tableaux

# 遍历优化:不要使用$(ls)的写法,避免文件名带空格/特殊字符时报错
for fichier in "$dossier_url"/*; do
  # 只输出文件名,去掉前缀路径
  echo "$(basename "$fichier")"
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:45:05