Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 命令可以从Shell脚本工作,但不能从命令行工作?_Linux_Bash_Scripting_Command Line_Shell - Fatal编程技术网

Linux 命令可以从Shell脚本工作,但不能从命令行工作?

Linux 命令可以从Shell脚本工作,但不能从命令行工作?,linux,bash,scripting,command-line,shell,Linux,Bash,Scripting,Command Line,Shell,我在发帖前很快就搜索了这个帖子,但找不到任何类似的帖子。让我知道他们是否存在 正在执行的命令似乎非常简单。目录列表用作函数的输入 该目录包含一组名为“epi1_mcf_0####.nii.gz”的文件 命令行版本(执行此命令时bash正在运行): Shell脚本版本: #!/bin/bash fslmerge -t output_file `ls epi1_mcf_0*.nii.gz` 命令行版本失败了,但是shell脚本one工作得很好 错误消息是特定于函数的,但它仍然包含在函数中 **

我在发帖前很快就搜索了这个帖子,但找不到任何类似的帖子。让我知道他们是否存在


正在执行的命令似乎非常简单。目录列表用作函数的输入

该目录包含一组名为“epi1_mcf_0####.nii.gz”的文件

命令行版本(执行此命令时bash正在运行):

Shell脚本版本:

#!/bin/bash
fslmerge -t output_file `ls epi1_mcf_0*.nii.gz`
命令行版本失败了,但是shell脚本one工作得很好

错误消息是特定于函数的,但它仍然包含在函数中

** 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”函数中查找问题?

`ls epi1\u mcf\u 0*.nii.gz`
更简单地写为
epi1\u mcf\u 0*.nii.gz
。例如:

fslmerge -t output_file epi1_mcf_0*.nii.gz
`ls`
没有添加任何内容

注意:作为答案而不是评论发布。Markdown lite注释解析器被我的
`ls-epi1\u-mcf\u 0*.nii.gz`
标记阻塞了。

(我首先在注释中提到了这一点,但我会给出一个答案,因为它有帮助!)


是否定义了任何shell别名?(键入
alias
)这些将影响在命令行中键入的命令,但不会影响脚本

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

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


是否定义了任何shell别名?(键入
alias
)这些将影响在命令行键入的命令,但不会影响脚本。这解决了问题…'“ls”被定义为“ls--color”。我很好奇——为什么这会有不同?使用颜色版本时,ls的原始输出是否不同?(谢谢!)颜色是由转义码生成的,转义码是终端程序解释的额外字符序列,但您通常不想传递给其他程序。别名应为
ls--color=auto
,以便ls在不输出到tty时可以禁用颜色。请阅读;ls永远不应该以这种方式使用。不仅仅是吹毛求疵,绝对更好——如果不使用它,就不会有变量ls输出(比如颜色)的问题@与IFS上的拆分相比,Jefromi-color实际上是一个小问题;带有空格、不可打印字符或换行符的文件名是ls编程使用的许多其他问题之一。@Charles:当然。我刚才提到了颜色,因为它是这个问题中的问题。
fslmerge -t output_file epi1_mcf_0*.nii.gz