命令可以从Shell脚本运行,但不能从命令行运行?

时间:2010-11-17 01:44:00

标签: linux bash scripting command-line shell

我在发布之前很快搜索了这个,但找不到任何类似的帖子。如果它们存在,请告诉我。


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

该目录包含一堆名为“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”函数中查找问题?)

2 个答案:

答案 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)时才输出颜色代码。