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
相关产品推荐
相关产品推荐

