Alguns comandos não funcionam quando executados via ssh enquanto redirecionam a saída localmente

1

Eu posso executar os dois comandos a seguir, por exemplo, e obter a saída localmente:

ssh [email protected] ls > testhistory.txt  
ssh [email protected] "cat .bash_history" > testhistory.txt  

Mas se eu executar o seguinte comando, a saída local estará sempre vazia:

ssh [email protected] history > testhistory.txt

Se eu ssh para o destino remoto e, em seguida, executar o comando history , recebo a saída esperada.

Por que o comando history não produz resultados quando executado em linha com ssh , mas o comando ls funciona normalmente? O que preciso alterar para tornar os resultados da saída do comando history no arquivo local da maneira como fiz o comando ls sem ter que cat o arquivo .bash_history ?

    
por Jeff Schaller 11.09.2018 / 00:56

1 resposta

2

history é um comando interno para bash, portanto você não deseja executar o executável history , você deseja executar o executável bash . ls funciona porque é um executável por si só, geralmente em /bin/ls .

Além disso, por padrão o bash desativa o histórico em shells não interativos, como é o caso quando você executa um comando remoto.

Você pode criar um script de shell na máquina remota para ativá-lo e executar o histórico, por exemplo:

#!/usr/bin/bash
HISTFILE=~/.bash_history
set -o history
history

Ou, se você realmente quiser fazer tudo isso a partir da chamada ssh, você pode fazer:

ssh [email protected] 'echo -e "HISTFILE=~/.bash_history\nset -o history\nhistory" | bash'

Note que também não leva em consideração a variável HISTTIMEFORMAT , se você usá-lo na máquina remota, então planeje isso.

Referências: Comando de histórico dentro do script bash

    
por 11.09.2018 / 01:16