【发布时间】:2011-05-11 04:33:31
【问题描述】:
我在发帖前快速搜索了这个,但找不到任何类似的帖子。让我知道它们是否存在。
正在执行的命令看起来很简单。目录列表用作函数的输入。
该目录包含一堆名为“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”函数中寻找?)
【问题讨论】:
-
您是否定义了任何 shell 别名? (输入
alias)这些会影响在命令行输入的命令,但不会影响脚本。 -
解决了这个问题...'ls'被定义为'ls --color'。我很好奇 - 为什么这会有所作为?使用彩色版本时,ls的原始输出是否不同? (谢谢!)
-
颜色是用转义码生成的,由终端程序解释的额外字符序列,但您通常不想传递给其他程序。
-
别名应该是
ls --color=auto,以便ls在不输出到tty时可以禁用颜色。 -
请阅读mywiki.wooledge.org/ParsingLs; ls 永远不应该以这种方式使用。
标签: linux bash scripting command-line shell