bash 无法从文本文件中找到目录

bash is unable to find directories from text file

超新到bash

我写了一个 bash 脚本,它在一个 MAC 上完美运行,但在另一个 MAC.

上运行不佳

代码迭代循环受试者的文件夹,复制数据,执行一些功能,删除复制的数据,然后移动到下一个受试者。为此,我调用了一个包含主题名称的文本文件,它通知脚本 select 相应的主题文件夹(在下面的代码中使用变量 $mri_path)。

问题是,在这个新的 MAC- 脚本无法使用文本文件找到主题的文件夹- 错误代码:file/directory 不存在。 MACs 之间的主要区别在于所使用的文本文件——它包含不同的主题名称。我可以对脚本进行硬编码以找到主题的文件夹,所以这让我怀疑文本文件没有被正确读取。

我尝试过不同的文本文件格式(例如,unicode、Macintosh 格式、制表符分隔)...所以我不知道为什么脚本找不到主题文件夹。

简化代码:

#!/bin/bash 

#usage: ./dcm2nii_batch.sh subj.txt startline endline


s1=$((-1))
s2=$((-1))

vars=($(awk -F= '{print}' subj.txt));

for ((i=s1; i<s2; i++));
do mri_path=${vars[$i])};

echo $mri_path;
echo '***';
cd /Users/syschaef/Desktop/dcm2nii_batch/Raw/$mri_path

错误发生在最后一行,因为 cd 命令失败。


文本文件数据是与主题文件夹相对应的主题标识号 names/directories(屏幕截图):

感谢您抽出时间阅读and/or回复!

该脚本包含语法错误,这就是我推荐 https://www.shellcheck.net/ 的原因。

subj.txt 可能包含您的屏幕截图中不可见的字符。 尝试 xxd subj.txt 并与有效的进行比较。

您也可以使用

修复文件
dos2unix subj.txt

如果有 Windows 行结束。

在做某事之前检查潜在问题

d="/Users/syschaef/Desktop/dcm2nii_batch/Raw/$mri_path"
if [[ ! -d "$d" ]]
then
    printf 'ERROR: %d not a directory\n' "%d" >&2
    exit 1
fi
cd "$d"