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以前に使用したコマンドを簡単に検索できるように、2台のコンピュータでファイルを結合、並べ替え、同期するプロセスを作成しています。

~/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

その後、記録を整理して美しいスクリプトを作成してください!

関連情報