例如,我可以运行以下两个命令并在本地获取输出:
ssh [email protected] ls > testhistory.txt
ssh [email protected] "cat .bash_history" > testhistory.txt
但如果我运行以下命令,本地输出始终为空:
ssh [email protected] history > testhistory.txt
如果我ssh
到达远程目的地然后运行命令history
,我会得到预期的输出。
为什么history
内联运行时不输出结果ssh
但ls
命令正常?我需要更改什么才能使history
命令将结果输出到本地文件,就像我执行ls
命令而无需使用cat
文件一样.bash_history
?
答案1
history
是 bash 的内部命令,因此您不想运行可执行文件history
,而是想运行可执行文件bash
。ls
之所以有效,是因为它本身就是一个可执行文件,通常位于/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
请注意,如果您在远程计算机中使用它,它也不会考虑该变量,因此请为此做好计划。