Eu gosto do fluxo de notação polonês reverso ao escrever apenas com tubos. Eu sou uma codificação muito mais rápida e a qualidade / velocidade dos códigos não é tão importante. Também eu não quando o encadeamento é hella mais fácil para comentar as partes da cadeia e ecoar a saída de corrente em vez de apagar carrapatos etc.
MageProspero
Se você estiver preocupado com a facilidade de depuração, considere colocar o comando backticks em uma série de linhas separadas. A=$( some | command | here )com cada um de some |, command |e hereem sua própria linha.
Todos saudam o último cachimbo. Também é necessário definir o conjunto de notas laterais + m (ermmm ou -m) a partir de uma linha de comando, pois o último canal não funciona com o controle de trabalho ativo.
precisa saber é o seguinte
17
Você pode fazer algo assim, se você usar bash:
echo cart |while read spo;do echo $spo;done
Infelizmente, a variável "spo" não existirá fora do loop while-do-done. Se você conseguir o que deseja dentro do loop while, isso funcionará.
Na verdade, você pode fazer quase exatamente o que escreveu acima no ATT ksh (não no pdksh ou mksh) ou no fabuloso zsh:
Você pode usar coprocesses na Shell Korn (por exemplo mksh): echo cart |& while read -p spo; do echo $spo; done(na verdade, melhor usar while IFS= read -p -r spo; do…embora)
mirabilos
2
Se eu entendi o problema corretamente, você deseja canalizar stdout para uma variável. Pelo menos era o que eu estava procurando e acabei aqui. Então, para aqueles que compartilham o meu destino:
Por que você gostaria de canalizar a saída para uma planície cat?
roaima
1
@roaima Alguns comandos reconhecem que estão rodando em um terminal e se comportam de maneira diferente do que se estivessem enviando para um tubo. Em particular, eles podem truncar linhas para a largura da tela atual. Para a maioria dos comandos, o comando cat é redundante.
BillThor
Ah, ok, agora vejo o que você estava tentando ilustrar. A echo | catconstrução me jogou.
roaima 27/01
1
Aqui está a minha solução para o problema.
# assign will take last line of stdout and create an environment variable from it# notes: a.) we avoid functions so that we can write to the current environment# b.) aliases don't take arguments, but we write this so that the "argument" appears# behind the alias, making it appear as though it is taking one, which in turn# becomes an actual argument into the temporary script T2.# example: echo hello world | assign x && echo %x outputs "hello world"
alias assign="tail -1|tee _T1>/dev/null&&printf \"export \\\$1=\$(cat _T1)\nrm _T*\">_T2&&. _T2"
A=$( some | command | here )
com cada um desome |
,command |
ehere
em sua própria linha.Respostas:
Funcionaria (armazenaria a saída
echo
sem o caractere de nova linha à direita naspo
variável) desde queecho
emita apenas uma linha.Você sempre pode fazer:
As seguintes soluções funcionariam em
bash
scripts, mas não nobash
prompt:Ou:
Para armazenar a saída de
whatever
até os primeiros caracteres NUL (bash
variáveis não pode armazenar caracteres NUL de qualquer maneira) no$spo
.Ou:
para armazenar a saída de
whatever
na$spo
matriz (uma linha por elemento da matriz).fonte
IFS=
eread
?Você pode fazer algo assim, se você usar
bash
:Infelizmente, a variável "spo" não existirá fora do loop while-do-done. Se você conseguir o que deseja dentro do loop while, isso funcionará.
Na verdade, você pode fazer quase exatamente o que escreveu acima no ATT ksh (não no pdksh ou mksh) ou no fabuloso zsh:
Portanto, outra solução seria usar ksh ou zsh.
fonte
mksh
):echo cart |& while read -p spo; do echo $spo; done
(na verdade, melhor usarwhile IFS= read -p -r spo; do…
embora)Se eu entendi o problema corretamente, você deseja canalizar stdout para uma variável. Pelo menos era o que eu estava procurando e acabei aqui. Então, para aqueles que compartilham o meu destino:
Atribui
cart
à variável$spa
.fonte
Se você deseja apenas exibir o fluxo atual de tubos, use
cat
.Se você deseja continuar sua cadeia de comandos, tente usar o
tee
comando para ecoar a saída.Você pode usar um alias para encurtar o comando.
fonte
cat
?echo | cat
construção me jogou.Aqui está a minha solução para o problema.
fonte