Fazendo eco de um número?

6

Para um arquivo no sysfs, tentei usar

echo 45>target_size

para definir o valor como 45. Isso falhou, com uma entrada inválida. No entanto, se eu fizer:

x=45;echo $x>target_size

funciona bem. Além disso, se eu usar um número muito grande, isso me dará um erro sobre ter um número de arquivo inválido. Então, aparentemente, quando você faz eco de um número direto, o terminal está interpretando isso como um descritor de arquivo, em vez de um número literal. Qual é a maneira correta de ecoar um número?

    
por Zephyr 24.01.2017 / 15:07

2 respostas

20

É uma questão de como o shell analisa seu comando, eu acho. Quando você faz

echo 45>target_size

o shell redireciona o descritor de arquivo 45 para o arquivo target_size e, em seguida, executa echo sem argumentos.

Se você fizer isso

echo 45 >target_size

ele redireciona o descritor de saída padrão para o arquivo target_size e, em seguida, executa echo 45 .

TL; DR adiciona espaço em branco antes do operador de redirecionamento.

    
por steeldriver 24.01.2017 / 15:18
3

@ A resposta da steeldriver está correta - o espaço entre o número e o operador de redirecionamento é importante. Parece ser um comportamento inconsistente, como em meus testes echo 45>output.txt escreve 45 para arquivar em shsh93 e dash shells.

Como alternativa, você sempre pode usar o comando tee com here-string operator <<< .

tee  output_file.txt <<< "45"

Ou com os shells que não têm <<< operator, echo 45 | tee output_file.txt

    
por Sergiy Kolodyazhnyy 24.01.2017 / 15:30