Você pode fazer isso:
TM_LOCAL=$(ls -l --time-style=long-iso ~/.vimrc | \
awk '{ print $6" "$7 }' ; exit ${PIPESTATUS[0]} )
Em seguida, $?
será o código de retorno de ls
. Isso não funciona se você precisar do código de retorno de mais de uma das partes do pipe (mas você pode dividir o pipeline se a saída não for muito grande, como é aqui).
Aqui está uma maneira bastante cara de obter o array PIPESTATUS
completo e a saída. Não é muito elegante, mas não encontrou mais nada:
result=$(echo -e "a\nb\nc" | \
( cat ; exit 1 ) | \
( cat ; exit 42 ) ; echo ${PIPESTATUS[@]})
output=$(head -n -1 <<< "$result")
status=($(tail -n 1 <<< "$result"))
echo "Output:"
echo "$output"
echo "Results:"
echo "${status[@]}"
O que dá:
Output:
a
b
c
Results:
0 1 42