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"
超新到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"