In Bash-Skripten versuche ich, meine Variablen für Funktionen lokal zu halten, wo immer ich kann, und dann das, was ich brauche, aus Funktionen wie unten zu übergeben
#!/bin/bash
function FUNCTION() {
local LOCAL="value"
echo "$LOCAL" # return this variable
}
GLOBAL=$(FUNCTION)
echo "$GLOBAL"
Aber ist es möglich, dies zu tun, während die eigenen Echos der Funktion eingeschlossen werden, so dass ich sie nicht in einer Variablen abfangen muss, wenn die Funktion ihre eigenen Nachrichten zur Ausgabe hat
#!/bin/bash
function FUNCTION() {
local LOCAL="value"
echo "$LOCAL" # return this variable
echo "This function is done now" # do not return this variable
}
GLOBAL=$(FUNCTION)
echo "$GLOBAL" # should only echo 'value'
bash
shell-script
function
TheLovelySausage
quelle
quelle
function foo()
Syntax? Sie können eine bessere POSIX-Kompatibilität mit 9 weniger Tastenanschlägen erzielen.Antworten:
Alles, was von der Funktion gedruckt wird, kann erfasst werden, wenn Sie den richtigen Ausgabestream erfassen. Der einfachste Weg, etwas zu drucken und eine andere Ausgabe zu speichern, besteht darin, die überflüssige Ausgabe auf einen Standardfehler umzuleiten:
Eine andere Möglichkeit besteht darin, sich in einer Datei anzumelden, anstatt Protokollnachrichten direkt zu drucken, beispielsweise mit folgenden Schritten:
Bash-Funktionen können jedoch keine Variablen zurückgeben . Der einzige tatsächliche "Rückgabewert" ist der Exit-Code. Aus diesem Grund ( und vielen anderen Gründen ) möchten Sie eine andere Sprache wie Python, Ruby oder Java verwenden, wenn Sie eine zuverlässige Protokollierung, Rückgabewerte, Ausnahmebehandlung und mehr wünschen.
quelle
Sie können Infomeldungen zu Standardfehlern anzeigen:
Einige andere Vorschläge finden Sie in diesem Artikel im Linux-Journal : Verwenden Sie globale Variablen (die Sie nicht bevorzugen) oder übergeben Sie den Namen der Variablen, um das Ergebnis zurückzugeben.
quelle
/dev/stderr
zeigt auf fd 2 und kann weiterhin von&>blah
oder umgeleitet werden2>blah
./dev/tty
vielleicht besser.