Bash 스크립트의 기록 명령

Bash 스크립트의 기록 명령

기록은 쉘 내장이므로 BASH 스크립트에서는 사용할 수 없습니다. 그렇다면 BASH 스크립트를 사용하여 이를 달성할 수 있는 방법이 있습니까?
제가 여러분을 위해 준비한 스크립트는 다음과 같습니다.

#!/bin/bash
history |  tail -100 > /tmp/history.log
cd /tmp
uuencode history.log history.txt  | mail -s "History log of server" [email protected]

답변1

기본적으로 Bash는 비대화형 셸에서 기록을 비활성화하지만 켤 수 있습니다.

#!/bin/bash
HISTFILE=~/.bash_history
set -o history
history | tail …

그러나 해당 서버의 활동을 모니터링하려고 하면 셸 기록은 쓸모가 없습니다(기록에 표시되지 않는 명령을 실행하는 것은 쉽지 않습니다). 바라보다Linux에서 모든 프로세스 시작을 기록하는 방법.

스크립트를 디버깅하는 경우 쉘 기록은 유용한 정보를 얻는 최선의 방법이 아닙니다. 더 나은 도구는 set -x스크립트 상단 근처에 배치되는 디버그 추적 도구입니다 . 추적은 표준 오류에 기록됩니다.

답변2

비대화형으로 실행될 때 실제로 기록 기능을 사용하는지 확실하지 않습니다. 그렇지 않으면 실행하는 모든 쉘 스크립트가 명령 기록을 엉망으로 만들 것입니다.

그냥 소스 로 ${HOME}/.bash_history가서 .history | tail -100tail -100 ${HOME}/.bash_historygrep -v ^# ${HOME}/.bash_history | tail -100

답변3

history스크립트에서 활성 셸 세션의 명령 출력을 사용 하려면 먼저 별칭을 사용하여 명령을 실행할 수 있습니다. 그런 다음 동일한 별칭을 사용하여 나머지 스크립트를 호출할 수 있습니다. 이러한 구성을 사용하면 history실제 스크립트에서 명령을 사용하는 것과 본질적으로 동일한 결과를 얻을 수 있습니다.

예를 들어 스크립트 이름이 script.sh라고 가정하면 다음과 같은 별칭을 만들 수 있습니다.

alias hy_tmp='history | tail -100 > /tmp/history.log ; bash /patch/to/script.sh'

스크립트를 다음과 같이 변경합니다.

#!/bin/bash
cd /tmp
uuencode history.log history.txt  | mail -s "History log of server" [email protected]

~/bash_history예전에 사용했던 명령어를 쉽게 검색할 수 있도록 두 대의 컴퓨터에서 파일을 결합, 정렬, 동기화하는 과정을 작성하던 중 이런 사실을 발견했습니다 .

~/bash_history업데이트를 수행하기 위해 새 셸에 로그인할 필요 없이 누적 기록 파일을 업데이트하는 것이 훨씬 쉽습니다 . 모니터링 서버의 경우 다른 답변에서 언급했듯이 분명히 작동하지 않습니다.

내 구체적인 사용법은 다음과 같습니다.

alias hbye='history | cut -c 8- > /home/chris/.bash_history_c; bash /hby.sh

그런 다음 스크립트는 hby.sh모든 파일에서 모든 고유 항목을 추출합니다 ~/.bash_history*.

답변4

script.sh아래 이름의 스크립트를 만듭니다. X라는 스크립트를 생성하고 그 안에 Y행의 기록을 넣습니다.

#!/bin/bash
SCRIPT_NAME=$1
NUMBER_OF_LINES_BACK=$2

# Enable History in a non interactive shell
HISTFILE=~/.bash_history
set -o history

# echo shabang line and x number of lines of history to new script
echo \#\!\/bin\/bash > $SCRIPT_NAME.sh; history | tail -n $NUMBER_OF_LINES_BACK >> $SCRIPT_NAME.sh;
chmod u+x $SCRIPT_NAME.sh;

# Open the newly created script with vim
vim $SCRIPT_NAME.sh;
~

그런 다음 마지막 14줄에서 작업한 "task"라는 작업을 수행하는 스크립트를 생성하려면 다음을 실행하세요.

script.sh task 14

그런 다음 기록을 정리하여 아름다운 스크립트를 만드세요!

관련 정보