No shell, o valor de retorno de uma função é como o status de saída de um comando: você só pode retornar um valor inteiro pequeno indicando sucesso (0) ou um código de falha (> 0).
Este status não tem nada a ver com a saída de um comando. Para executar um comando e armazenar sua saída em uma variável, use a substituição de comando . Para executar um comando em uma função e obter sua saída como a saída da função, basta executar o comando.
function which_terminal {
ps -p$PPID | awk "'NR==2'" | cut -d "' '" -f 11
}
Observe que a análise da saída de ps
não é confiável e é excessiva. (Além disso, você entendeu errado: você está analisando 'NR==2'
a awk
e ' '
a cut
, ambos argumentos inválidos; você precisa de aspas simples ou aspas duplas em torno de cada uma delas, não de ambas. ) O comando ps
tem opções para imprimir qualquer campo que você queira, por exemplo comm
para o nome do executável (truncado para 16 caracteres no Linux) ou args
para a linha de comando completa com argumentos (e às vezes o caminho completo para o comando, dependendo de como ele foi chamado).
function which_terminal {
ps -p$PPID -o comm=
}
Ou para armazenar a saída em uma variável:
parent_process_command=$(ps -p$PPID -o comm=)
A razão para o erro que você está recebendo é que o zsh está tentando analisar o que segue return
como um argumento de um comando (aqui é um argumento da palavra-chave return
, mas eles são analisados no mesmo caminho). Ele vê um parêntese aberto e decide que é o início de uma expressão curinga. Essa expressão curinga corresponderia a um arquivo chamado ps -p16632
, awk 'NR==2'
ou cut -d -f 11
(com espaços iniciais / finais que não são renderizados aqui), mas como você (sem surpresa) não possui arquivos com nenhum desses nomes, zsh reclama que não encontrou uma correspondência. return ?
retornaria 3 se você tivesse um arquivo chamado 3
no diretório atual e nenhum outro arquivo com um nome de um caractere.