我在发布之前很快搜索了这个,但找不到任何类似的帖子。如果它们存在,请告诉我。
正在执行的命令看起来非常简单。目录列表用作函数的输入。
该目录包含一堆名为“epi1_mcf_0 ###。nii.gz”的文件
命令行版本(执行此操作时bash正在运行):
fslmerge -t output_file `ls epi1_mcf_0*.nii.gz`
Shell脚本版本:
#!/bin/bash
fslmerge -t output_file `ls epi1_mcf_0*.nii.gz`
命令行版本失败,但shell脚本运行完美。
错误消息特定于该功能,但无论如何都包括在内。
** ERROR (nifti_image_read): failed to find header file for 'epi1_mcf_0000.nii.gz'
** ERROR: nifti_image_open(epi1_mcf_0000.nii.gz): bad header info
Error: failed to open file epi1_mcf_0000.nii.gz
Cannot open volume epi1_mcf_0000.nii.gz for reading!
我对此问题感到非常沮丧(在我发现有一种方法可以让命令工作之后,我不太感到沮丧。)
任何帮助都将不胜感激。
(或者普遍认为应该在“fslmerge”函数中查找问题?)
答案 0 :(得分:7)
`ls epi1_mcf_0*.nii.gz`
更好地编写为epi1_mcf_0*.nii.gz
。如:
fslmerge -t output_file epi1_mcf_0*.nii.gz
`ls`
不会添加任何内容。
注意:作为答案而不是评论发布。 Markdown-lite注释解析器在我的`` `ls epi1_mcf_0*.nii.gz` ``
标记上被阻塞。
答案 1 :(得分:2)
(我先在评论中提到过这个问题,但是因为它有所帮助我会做出回答!)
您是否定义了任何shell别名? (类型alias
)这些将影响在命令行键入的命令,但不会影响脚本。
Linux通常将ls
定义为ls --color
。这可能会影响输出,因为颜色代码通过常规输出流作为转义码发送。如果您使用ls --color=auto
,它将自动检测其输出是否为终端。来自man ls
:
默认情况下,颜色不用于区分文件类型。那是 相当于使用
--color=none
。使用--color
选项而不使用 可选的WHEN参数等同于使用--color=always
。同--color=auto
,仅当标准输出连接到终端(tty)时才输出颜色代码。