сохраните текущую команду, выполненную в отдельном файле

Я хочу сохранить журнал всех команд, которые я выполняю в отдельном файле журнала (кроме истории) наряду с другим описанием. Для достижения этого, я должен знать, как я могу выбрать текущую команду выполнения и сохранить ее в файле.

Сценарий: В настоящее время, Каждый раз, когда я выполняю команду sudo, она спрашивает по причине, которую я обеспечиваю. И причина хранится в файле журнала в моем каталоге. Но теперь я хочу сохранить команду, выполненную наряду с причиной, и я не могу найти способ сделать это.

$ sudo touch file
Reason for sudo: creating new file test
[sudo] password for root: 

Как в вышеупомянутом, я хочу сохранить команду sudo touch file наряду с причиной, обеспеченной в файле каждый раз, я выполняю команду.

2
задан 24 February 2019 в 18:44

2 ответа

Спасибо за предложения. Я достиг этого использования псевдонима в моем .bashrc и сценарий оболочки.

alias sudo='bash $HOME/.sudolog'

Сценарий $HOME/.sudolog

#!/bin/bash

#Script to log the sudo commands used with reason.

##                                                                       ##
#LAST UPDATED ON 24 FEB 2019 16:30 IST#
##                                                                       ##

logfile="$HOME/sudo.log"
cmd="sudo $*"

date_time=`date +'%d/%m/%Y %H:%M:%S'` > /dev/null 2>&1
username=`whoami` > /dev/null 2>&1
read -p "Reason for sudo: " reason
eval $cmd
rtrn="$?"
echo "<date time> $date_time </date time>  <user> $username </user>  <command> sudo $* </command>  <reason> $reason </reason>  <return> $rtrn </return>"  >> "$logfile"
0
ответ дан 2 December 2019 в 04:38

Можно использовать крошечную функцию, чтобы переопределить команду того же имени, добавить расширения и затем выполнить фактическую команду, например, для sudo (принятие bash):

sudo () {
    read -p 'Reason for sudo: ' reason
    printf 'sudo %s : %s\n' "$*" "$reason" >>~/reason_file.txt
    command sudo "$@"
}

Помещенный это в любой файл инициализации сессии оболочки, например. ~/.bashrc. И очевидно можно изменить тело функции для удовлетворения потребностей.

Теперь, когда Вы будете работатьsudo some_command, вышеупомянутая функция будет выполнена и сделает определенные операции перед возможным выполнением sudo some_command с фактическим sudo внешний двоичный файл.


Как примечание стороны, все оболочки хранят интерактивную историю сессии в отдельном файле, например, для bash это” s ~/.bash_history, для zsh это ~/.histfile. И history встроенная команда получит Вас сохраненный (и буферизованный) история.

1
ответ дан 2 December 2019 в 04:38

Другие вопросы по тегам:

Похожие вопросы: