2016-12-22 8 views
0

У меня есть сценарий, который содержит расположение файла, и я запускаю команду для исправления файлов. Но я не могу записать вывод в файл.Скрипт оболочки для чтения и записи в файл

#!/bin/ksh 
while read line 
do 
`shnfix "$line"` >> output.txt 
done < filename.txt 

Результат, полученный после добавления набора -x в начале скрипта.

+ < filename.txt + read line + shnfix /x01/naveen_wav/file1.wav + >> output.txt Fixing [/x01/naveen_wav/file1.wav] (3:49.42) --> [file1-fixed.wav] : 100% OK Padded last file with 1194 zero-bytes. + read line + shnfix /x01/naveen_wav/file2.wav + >> output.txt Fixing [/x01/naveen_wav/file2.wav] (4:30.35) --> [file2-fixed.wav] : 100% OK Padded last file with 644 zero-bytes. + read line

+0

Что ошибка вы получаете? Пожалуйста, используйте блок кода для своего скрипта, чтобы он был читабельным. – codeforester

+0

Я не могу записать вывод в файл. – Mahi

+0

попытайтесь удалить внешние кавычки. Сохраняйте только: shnfix «$ line» >> output.txt – RLM

ответ

0

Выход должен быть внутри `

`shnfix $line >> output.txt` 

Так что сценарий может быть такой:

#!/bin/ksh 
filename="/path/to/filename.txt" 
while IFS= read -r line 
do 
     # display line or do somthing on $line 
     echo "$line" 
     `shnfix $line >> output.txt` 
done <"$fileName" 
+0

, помещая его в backquotes, ничего не сделает, поскольку вывод записывается в файл. Он не решает каких-либо проблем - он делает процесс намного медленнее, потому что shnfix должен запускаться в подоболочке. – codeforester

+0

Я устал, пробовал с вашими изменениями, но не смог записать вывод в файл – Mahi

+0

Какая ошибка? – codeforester

1

более эффективной версии (I/O мудрый) из @ Gilė годов код:

#!/bin/ksh 
filename="/path/to/filename.txt" 
while IFS= read -r line 
do 
    shnfix "$line" 
done <filename.txt> output.txt 
+0

Это тоже не работает вне .. – Mahi

0

Извинения MODS, я не могу добавить комментарий на данный момент из-за репутации, поэтому ставим его здесь как попытку помочь OP. Поэтому, если возможно, вы можете перевести это в раздел комментариев.

Здравствуйте Навин,

могли бы вы поместить set -x в запуске вашего сценария, чтобы мы могли видеть, где сценарий неудачу и что там происходит.

+0

'+ > output.txt Фиксация [/x01/naveen_wav/file1.wav] (3: 49.42) -> [file1-fixed.wav]: 100% OK Заполненный последний файл с 1194 нулевым байтом. + строка строки + shnfix /x01/naveen_wav/file2.wav + >> output.txt Фиксация [/x01/naveen_wav/file2.wav] (4: 30.35) -> [file2-fixed.wav]: 100% OK Заполненный последний файл с 644 нулевым байтом. + строка для чтения ' – Mahi

0

Просто удалите задние выступы, они, по крайней мере, запутывают.

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

Если результат начинается с, например, line, это правильная команда unix, которая не создает вывод, вы не видите ошибку, но не вывод.

Я получаю test.ksh[4]: line1: not found [No such file or directory] где 'line1' - первая строка в моем тестовом файле.

Или сохранить его в блоке и перенаправить с него весь вывод. Делает намерение более ясным, и проще добавить комм.

#!/bin/ksh 
filename="/path/to/filename.txt" 
{ 
    while IFS= read -r line 
    do 
    shnfix "$line" 
    done < "$filename" 
} > output.txt 

http://www.shellcheck.net (большой аварийный монтера) даст подобные намеки