예를 들어 다음 두 명령을 실행하고 로컬로 출력을 얻을 수 있습니다.
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
history
bash의 내부 명령이므로 실행 파일 을 실행하고 싶지 않습니다 bash
. ls
이는 일반적으로 /bin/ls
.
이 외에도 bash는 원격 명령을 실행할 때와 마찬가지로 기본적으로 비대화형 셸에서 기록을 비활성화합니다.
원격 시스템에서 쉘 스크립트를 생성하여 이를 활성화하고 기록을 실행할 수 있습니다. 예를 들면 다음과 같습니다.
#!/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 스크립트의 기록 명령