Команды работают из скрипта Shell, а не из командной строки? - PullRequest
3 голосов
/ 17 ноября 2010

Я быстро искал это перед публикацией, но не смог найти аналогичных сообщений.Дайте мне знать, если они существуют.


Выполняемые команды кажутся очень простыми.В качестве входных данных для функции используется список каталогов.

Каталог содержит набор файлов с именем "epi1_mcf_0 ###. Nii.gz"

Версия для командной строки (bash работаеткогда это выполнено):

fslmerge -t output_file `ls epi1_mcf_0*.nii.gz`

Версия сценария оболочки:

#!/bin/bash
fslmerge -t output_file `ls epi1_mcf_0*.nii.gz`

Версия командной строки завершается неудачно, но сценарий оболочки один работает отлично.

Сообщение об ошибке относится только к этой функции, но оно все равно включено.

** 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 ]

7 голосов
/ 17 ноября 2010

`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` `` разметки.

2 голосов
/ 17 ноября 2010

(я упомянул об этом в комментарии первым, но я сделаю ответ, так как это помогло!)

У вас есть определенные псевдонимы оболочки? (Введите alias). Они будут влиять на команды, введенные в командной строке, но не на сценарии.

В Linux часто ls определяется как ls --color. Это может повлиять на вывод, так как цветовые коды отправляются как escape-коды через обычный поток вывода. Если вы используете ls --color=auto, он автоматически определит, является ли его выход терминалом или нет. От man ls:

По умолчанию цвет не используется для различения типов файлов. То есть эквивалентно использованию --color=none. Использование опции --color без необязательный аргумент WHEN эквивалентен использованию --color=always. С --color=auto, цветовые коды выводятся, только если стандартный вывод подключен к терминалу (tty).

...