2010-11-17 229 views
3

我在發帖之前很快搜索到了這個,但是找不到任何類似的帖子。讓我知道他們是否存在。命令從Shell腳本工作,但不是從命令行?


正在執行的命令看起來很簡單。目錄列表被用作函數的輸入。

該目錄包含了一堆命名文件的

命令行版本(這是執行時的bash運行) 「epi1_mcf_0 ### nii.gz」:

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

您是否定義了任何shell別名?(類型'別名')這些會影響命令行輸入的命令,但不會影響腳本。 – 2010-11-17 01:46:58

+0

解決了這個問題......'ls'被定義爲'ls --color'。我很好奇 - 爲什麼這會有所作爲?當使用顏色版本時,ls的原始輸出是不同的? (謝謝!) – 2010-11-17 01:55:32

+0

使用轉義碼生成顏色,這是由終端程序解釋的額外字符序列,但您通常不想傳遞給其他程序。 – 2010-11-17 01:59:26

回答

2

(我第一次提到這個的評論,但我會做出一個答案,因爲它幫助!)

你有任何的shell別名定義? (類型alias)這些會影響命令行鍵入的命令,但不會影響腳本。

Linux通常有ls定義爲ls --color。這可能會影響輸出,因爲顏色代碼是通過常規輸出流作爲轉義代碼發送的。如果您使用ls --color=auto,它將自動檢測其輸出是否爲終端。從man ls

默認情況下,顏色不用於區分文件的類型。這是 相當於使用--color=none。使用--color選項,而不使用 可選WHEN參數等同於使用--color=always。通過 --color=auto,僅當標準輸出連接到終端(tty)時才輸出顏色代碼。

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` ``標記上ch咽。

+0

謝謝!我不知道這個... – 2010-11-17 02:08:06

+0

不只是一個挑剔的,非常肯定更好 - 不能使用變量ls輸出(顏色,說)如果你不使用它的問題! – Cascabel 2010-11-17 02:10:42

+2

@Jefromi - 與IFS分裂相比,顏色實際上是一個小問題;帶有空格,非打印字符或換行符的文件名是編程使用ls的許多其他問題之一。 – 2010-11-17 03:15:22

相關問題