通过 ssh 执行并在本地重定向输出时,某些命令不起作用

通过 ssh 执行并在本地重定向输出时,某些命令不起作用

例如,我可以运行以下两个命令并在本地获取输出:

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

但如果我运行以下命令,本地输出始终为空:

ssh [email protected] history > testhistory.txt

如果我ssh到达远程目的地然后运行命令history,我会得到预期的输出。

为什么history内联运行时不输出结果sshls命令正常?我需要更改什么才能使history命令将结果输出到本地文件,就像我执行ls命令而无需使用cat文件一样.bash_history

答案1

history是 bash 的内部命令,因此您不想运行可执行文件history,而是想运行可执行文件bashls之所以有效,是因为它本身就是一个可执行文件,通常位于/bin/ls.

除此之外,默认情况下 bash 会禁用非交互式 shell 中的历史记录,就像运行远程命令时的情况一样。

您可以在远程计算机中创建一个 shell 脚本来启用它并运行历史记录,例如:

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

或者,如果您确实想通过 ssh 调用完成所有这些操作,您可以执行以下操作:

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

HISTTIMEFORMAT请注意,如果您在远程计算机中使用它,它也不会考虑该变量,因此请为此做好计划。

参考:bash 脚本中的历史命令

相关内容