命令从Shell脚本工作,但不是从命令行?

在发布之前,我迅速search了这个内容,但找不到任何类似的post。 让我知道他们是否存在。


正在执行的命令看起来非常简单。 目录列表被用作函数的input。

该目录包含一堆名为“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脚本完美地工作。

该错误消息是特定于该function,但它仍然包括在内。

 ** 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”函数中寻找?)

(我首先在评论中提到过这个,但是我帮你解答!

你有没有定义shell别名? (类型alias )这些会影响在命令行键入的命令,但不会影响脚本。

Linux经常把ls定义为ls --color 。 这可能会影响输出,因为颜色代码是通过常规输出流作为转义码发送的。 如果使用ls --color=auto ,则会自动检测其输出是否为终端。 从man ls

默认情况下,颜色不用于区分文件的类型。 这相当于使用--color=none 。 没有可选的WHEN参数的情况下使用--color选项相当于使用--color=always 。 使用--color=auto ,仅当标准输出连接到终端(tty)时才输出颜色代码。

`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` ``标记上`` `ls epi1_mcf_0*.nii.gz` ``