2016-05-31 7 views
1

Ich versuche, die Ausgabe eines Skripts in einer Variablen zu speichern. Hier ist der Code von meinem Skript (delete.sh):Lagerausgabe eines Skripts in einer Bash-Variablen (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̀ 

Als ich dieses Skript exec Ich habe das in der Ausgabe:

[/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 

Also ich verstehe nicht, warum ich das nicht auf Lager kann Ausgabe in meiner Shell-Variable. Vielleicht liegt es daran, dass ich an einem QNAP QTS 4.0 arbeite? Aber ich denke nicht.

+0

Wird "remoteSync" möglicherweise auf "stderr" anstelle von "stdout" gedruckt? '$ (...)' nimmt nur 'stdout'. In der Quelle, die Sie zur Verfügung gestellt haben, wird "echo" zu "delete.log" mit einem Akzent über dem "g", also vielleicht drucken Sie nur in die falsche Datei? –

Antwort

0

Vielleicht remoteSync schreibt auch auf Standardfehler.

einen Versuch dieses Geben Sie:

#!/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 

Wenn die log Variable nur die Ausgabe in die Protokolldatei verwendet wird versuchen, dies zu anhängen:

#!/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 

Sowohl die Standardausgabe und Standardfehler sind an die delete.log Datei angehängt, dank >> ... 2>&1.

>> ... hängt die Standardausgabe des Befehls an die Datei an.

2>&1 weist die Shell an, den Standardfehler (Dateideskriptor 2) auf die Standardausgabe (Dateideskriptor 1) umzuleiten. Der Standardfehler wird ebenfalls angehängt.

0

Ich habe die erste Option #!/Bin/bash printf "Suppression de% s \ n" "$ {1}" >> /share/MD0_DATA/remotesync/delete.log log = "$ verwendet (/ share/MD0_DATA/remotesync/remoteSync -rm "$ {1}" 2> & 1) " printf"% s \ n "" $ {log} ">> /share/MD0_DATA/remotesync/delete.log

Und es ist auch Arbeit. So schrieb remoteSync auch zum Standardfehler.

Danke für Ihre schnellen Antworten.

+0

Vielen Dank für dieses Feedback, sollten Sie in Betracht ziehen, meine Antwort dann formell zu akzeptieren. –

Verwandte Themen