En los scripts de bash, trato de mantener mis variables locales a las funciones siempre que puedo y luego paso lo que necesito de funciones como abajo
#!/bin/bash
function FUNCTION() {
local LOCAL="value"
echo "$LOCAL" # return this variable
}
GLOBAL=$(FUNCTION)
echo "$GLOBAL"
Pero, ¿es posible hacer esto mientras se incluyen los propios ecos de la función para que, si la función tiene sus propios mensajes de salida, no tenga que atraparlos en una variable
#!/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
fuente
fuente
function foo()
sintaxis antigua que no es POSIX ? Puede obtener una mejor compatibilidad POSIX con 9 combinaciones de teclas menos.Respuestas:
Todo lo que imprime la función se puede capturar si captura la secuencia de salida correcta. Entonces, la forma más fácil de imprimir algo y guardar alguna otra salida es redirigir la salida superflua al error estándar:
Otra posibilidad es iniciar sesión en un archivo en lugar de imprimir mensajes de registro directamente, por ejemplo, usando algo como esto:
Dicho esto, las funciones de Bash no pueden devolver variables . El único valor real de "retorno" es el código de salida. Por esta razón ( y muchas otras ), si desea un registro confiable, valores de retorno, manejo de excepciones y más, querrá usar un lenguaje diferente como Python, Ruby o Java.
fuente
Puede presentar mensajes de información en error estándar:
Algunas otras sugerencias se encuentran en este artículo de Linux Journal : use variables globales (que mencionó que no prefiere) o pase el nombre de la variable para devolver el resultado.
fuente
/dev/stderr
apunta a fd 2 y aún puede ser redirigido por&>blah
o2>blah
./dev/tty
quizás mejor.