2016-05-31 6 views
1

Я пытаюсь записать вывод скрипта в переменную. Вот код моего сценария (delete.sh):Выходной файл сценария в переменной bash (QNAP QTS 4.0)

#!/bin/bash 

echo "Suppression de $1" >> /share/MD0_DATA/remotesync/delete.log 
log=$(/share/MD0_DATA/remotesync/remoteSync -rm "$1") 
echo $log >> /share/MD0_DATA/remotesync/delete.log̀ 

Когда я EXEC этот сценарий, я получил, что на выходе:

[/share/MD0_DATA/.qpkg/remotesync] # soft/delete.sh "archivesPAO/3MONTAGE BORNE OZ 275x155.psd" 
drivers : ("QMYSQL3", "QMYSQL", "QSQLITE") 
Table hubicobject & hubicobjectLocal sucessfully reseted 
Load container Object 
" ATTENTION recuperation du prefix : archivesPAO/3MONTAGE BORNE OZ 275x155.psd" 
Credentials 
Refresh Token 
"Upload : 100% 0.00 octets/s fin dans : 00:00:00" 
"Download : 100% 0.00 octets/s fin dans : 00:00:00" 
"Download : 100% 0.00 octets/s fin dans : 00:00:00" 
"https://lb9911.hubic.ovh.net/v1/AUTH_f5cb82ec59a615a1c56053608e0c6123" 
"Download : 100% 0.00 octets/s fin dans : 00:00:00" 
"Download : 100% 0.00 octets/s fin dans : 00:00:00" 
"Temps pour inserrer 10000 entree : 0 ms" 
[/share/MD0_DATA/.qpkg/remotesync] # cat soft/delete.log 

Suppression de archivesPAO/3MONTAGE BORNE OZ 275x155.psd 

Так что я не понимаю, почему я не могу запасти это вывода в моей переменной оболочки. Возможно, это потому, что я работаю над QNAP QTS 4.0? Но я так не думаю.

+0

Возможно ли 'remoteSync' печатать на' stderr' вместо 'stdout'? '$ (...)' будет захватывать только 'stdout'. Кроме того, в источнике, который вы указали, вы 'echo' собирается' delete.log' с акцентом над 'g', поэтому, возможно, вы просто печатаете не тот файл? –

ответ

0

Возможно remoteSync также записывается стандарт ошибка.

Дайте попробовать это:

#!/bin/bash 
printf "Suppression de %s\n" "${1}" >> /share/MD0_DATA/remotesync/delete.log 
log="$(/share/MD0_DATA/remotesync/remoteSync -rm "${1}" 2>&1)" 
printf "%s\n" "${log}" >> /share/MD0_DATA/remotesync/delete.log 

Если переменная log используется только для добавления вывода в файл журнала, попробуйте следующее:

#!/bin/bash 
printf "Suppression de %s\n" "${1}" >> /share/MD0_DATA/remotesync/delete.log 
/share/MD0_DATA/remotesync/remoteSync -rm "${1}" >> /share/MD0_DATA/remotesync/delete.log 2>&1 

Оба стандартный вывод и стандартные ошибки являются прилагается к файлу delete.log, благодаря >> ... 2>&1.

>> ... добавляет стандартный вывод команды в файл.

2>&1 поручает оболочке перенаправить стандартную ошибку (дескриптор файла 2) на стандартный вывод (дескриптор файла 1). Стандартная ошибка также добавляется.

0

Я использовал первый вариант #!/Bin/Баш Printf "Подавление де% s \ п" "$ {1}" >> /share/MD0_DATA/remotesync/delete.log журнала = "$ (/ share/MD0_DATA/remotesync/remoteSync -rm "$ {1}" 2> & 1) " printf"% s \ n "" $ {log} ">> /share/MD0_DATA/remotesync/delete.log

И это тоже работает. Таким образом, remoteSync также записывал стандартную ошибку.

Спасибо за ваши быстрые ответы.

+0

Благодарим вас за эту обратную связь, вы должны принять решение принять мой ответ формально. –

Смежные вопросы