Nos scripts bash, tento manter minhas variáveis locais para funções sempre que possível e depois passar o que preciso para funções como abaixo
#!/bin/bash
function FUNCTION() {
local LOCAL="value"
echo "$LOCAL" # return this variable
}
GLOBAL=$(FUNCTION)
echo "$GLOBAL"
Mas é possível fazer isso incluindo os ecos da própria função, para que, se a função tiver suas próprias mensagens para saída, não seja necessário capturá-las em uma variável
#!/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
fonte
fonte
function foo()
sintaxe antiga, não POSIX ? Você pode obter uma melhor compatibilidade com POSIX com menos 9 toques de teclas.Respostas:
Qualquer coisa impressa pela função pode ser capturada se você capturar o fluxo de saída correto. Portanto, a maneira mais fácil de imprimir algo e salvar alguma outra saída é redirecionar a saída supérflua para o erro padrão:
Outra possibilidade é fazer logon em um arquivo em vez de imprimir diretamente as mensagens de log, por exemplo, usando algo como isto:
Dito isto, as funções do Bash não podem retornar variáveis . O único valor "de retorno" real é o código de saída. Por esse motivo ( e muitos outros ), se você deseja um registro confiável, valores de retorno, tratamento de exceções e muito mais, use uma linguagem diferente como Python, Ruby ou Java.
fonte
Você pode apresentar mensagens informativas sobre erro padrão:
Algumas outras sugestões estão neste artigo do Linux Journal : use variáveis globais (das quais você mencionou que não prefere) ou passe o nome da variável para retornar o resultado.
fonte
/dev/stderr
aponta para fd 2 e ainda pode ser redirecionado por&>blah
ou2>blah
./dev/tty
talvez melhor.