Ziemlich einfach, ich habe eine echo
Anweisung in meiner Shell (Bash) -Skript, das ich an eine externe Datei als Protokollierungsmethode umleiten möchte. Das Skript wird stündlich von der Crontab des Root-Benutzers ausgeführt (über sudo crontab -e
).Wie leite ich die Ausgabe des Befehls echo im Bash-Skript in das Verzeichnis des Skripts um?
Ich möchte diese Protokolldatei im selben Verzeichnis wie das Skript befinden.
Mein erster Versuch war,
echo "$(date) | blah blah" >> "$(pwd)/script.log"
Dies ist jedoch eindeutig nicht als das Arbeitsverzeichnis des root crontab funktioniert (/root/
) ist nicht das gleiche wie das Verzeichnis des Skripts. So ein paar Ratschläge im Anschluss an SO habe ich stattdessen
script_dir=$(dirname $0)
echo "$(date) | blah blah" >> "$(script_dir)/script.log"
Diesmal für Gründe, warum ich noch nicht verstehen, wird die Protokolldatei unter /
gespeichert, wie in /script.log
.
Logischerweise würde man annehmen, dass die Variable script_dir
zu einem leeren String ausgewertet wurde und so wurde "$(script_dir)/script.log"
als "/script.log"
ausgewertet.
Aber als Test, habe ich ein einfaches Testskript geschrieben,
echo "$(dirname $0)"
und lief es von /
. Sicher genug, bekomme ich eine richtige nicht leere Ausgabe: /home/pi/scripts/testscripts/dirname.sh
(wo das Testskript ich schrieb, residiert).
Also, was ist das Geschäft, und wie bekomme ich das zum Funktionieren?
p.s. bash --version
sagt, dass ich derzeit GNU bash bin mit der Version 4.3.30 (1) -release
BTW, was ist deine Absicht, 'echo" $ (date) | blah blah "' zu machen, was für mich keinen Sinn ergibt. – Inian
@Inian Mein Skript startet meinen Raspberry Pi mit 'shutdown -r now' neu, wenn die Internetverbindung unterbrochen wird, was ich durch einen Blick auf den Exit-Code eines' ping'-Befehls in einem 'if'-Zustand festlege. Ich möchte ein Protokoll haben, wenn das passiert. Die volle 'echo'-Anweisung ist eigentlich '' $ (Datum + "% d% b% r") | $ (uptime -p) | Exit $ {code}. Neustart ... "'. – ning
fair genug! Prost! – Inian