o mesmo tr trad falhou em algumas das máquinas

0

Eu uso o seguinte código e falhei.

$ echo $TERM
xtermc
$ v=/bin:/usr/bin:/usr/local/bin ; echo $v | tr ':' '\n'
/binn/usr/binn/usr/local/bin

Parece pular meu '/'. Eu não sei como resolver isso. Minha concha é zsh. Eu mudei para bash, mas ainda falhei.

Mas, em outra máquina, funciona. e o resultado é

/bin
/usr/bin
/usr/local/bin

Eu descobri que existem três tr

/usr/local/bin/tr (GNU coreutils) 6.4
/usr/ucb/tr unkown version size 9916 bytes
/bin/tr size 19400 Usage: /bin/tr [ -cds ] [ String1 [ String2 ] ]
    
por Daniel YC Lin 13.03.2014 / 03:50

2 respostas

1

O problema é causado por tr diferentes e diferentes configurações de PATH.

works: /usr/local/bin/tr (GNU coreutils) 6.4
failed: /usr/ucb/tr unkown version size 9916 bytes
works: /bin/tr size 19400 Usage: /bin/tr [ -cds ] [ String1 [ String2 ] ]
    
por 14.03.2014 / 04:25
0

Como você está usando o zsh, pode usar essa abordagem e não dependerá mais de nenhum comando externo:

$ v=/bin:/usr/bin:/usr/local/bin; print -l ${(s.:.)v}
/bin
/usr/bin
/usr/local/bin

Como funciona:

  • o sinalizador de expansão de parâmetro (s.:.) divide o parâmetro $v em dois pontos (consulte man zshexpn )
  • print -l imprime cada argumento a seguir em uma única linha

Se você confiar no caractere de nova linha , use

$ print ${v//:/\n}

em que //from/to faz uma busca global (duas barras iniciais) & substituir.

    
por 13.03.2014 / 19:08