History - это встроенная в оболочку команда, которую я не смог использовать в скрипте BASH. Итак, есть ли способ добиться этого с помощью сценария BASH?
Вот мой сценарий для вас:
#!/bin/bash
history | tail -100 > /tmp/history.log
cd /tmp
uuencode history.log history.txt | mail -s "History log of server" hello@hel.com
bash
command-history
scripting
Виджай Рамачандран
источник
источник
histtest.sh: 5: set: Illegal option -o history
sh
точно разбираетесь в точной формулировке сообщения об ошибке). Чтобы получить доступ к истории bash, вам нужно использовать bash (скрипт начинается с#!/bin/bash
или#!/usr/bin/env bash
).Illegal option
(он сказал быset: history: invalid option name
).set -o history
истории , которая затем будет чучела с записями , как иif [...
vars=$(...
т.д.set -x
это намного полезнее.Я не уверен, использует ли он на самом деле возможность истории, когда работает не в интерактивном режиме, иначе каждый скрипт, который вы запускаете, загромождает вашу историю команд.
Почему бы не перейти непосредственно к источнику
${HOME}/.bash_history
, заменитьhistory | tail -100
наtail -100 ${HOME}/.bash_history
. (Если вы используете временные метки, вам, вероятно, придется сделать что-то вродеgrep -v ^# ${HOME}/.bash_history | tail -100
).источник
greq -v '^#[0-9]\+$'
(я иногда «исполняю» комментарии в своей оболочке ...)history
и выводомgrep
метода ...history -a; history -c; history -r
. (добавить, очистить, прочитать)Если вы хотите использовать вывод
history
команды из активного сеанса оболочки в сценарии, вы можете использовать псевдоним, чтобы сначала запустить команду. Затем, в том же псевдониме, вы можете вызвать оставшуюся часть сценария. С такой конфигурацией вы можете достичь практически того же результата, что иhistory
команда в реальном скрипте.Например, вы можете создать псевдоним, подобный этому, предполагая, что имя сценария - script.sh:
И измените скрипт на это:
Я нашел этот вопрос, когда писал процесс объединения, сортировки и синхронизации
~/bash_history
файлов на двух компьютерах, чтобы было легко искать команды, которые я использовал в прошлом.Гораздо меньше хлопот, чтобы обновить мой накопительный файл истории без необходимости заходить в новую оболочку для
~/bash_history
обновления. Для мониторинга сервера это, очевидно, не будет работать, как упоминалось в других ответах.В частности, я использую:
Затем скрипт
hby.sh
извлекает все уникальные записи из всех~/.bash_history*
файлов.источник
Встроенная история, кажется, отключена внутри сценария оболочки. Смотрите здесь: http://www.tldp.org/LDP/abs/html/histcommands.html
Я не нашел официальной документации по этому поводу.
источник
Создайте скрипт с именем
script.sh
как показано ниже. Он создает скрипт с именем X и помещает в него Y Количество строк вашей истории.Затем, если вы хотите создать скрипт для выполнения задачи с именем «задача», над которой вы работали последние 14 строк, запустите
Затем очистите свою историю, чтобы сделать хороший сценарий!
источник
histtest.sh: 5: set: Illegal option -o history
Команда history по умолчанию отключена в скрипте bash, поэтому даже команда history не будет работать в файле .sh. для его перенаправления, пожалуйста, перенаправьте файл bash_history в файл .sh.
или механизм истории может быть включен также путем упоминания файла истории и изменения параметров времени выполнения, как указано ниже
примечание: упомянутые выше две строки в верхней части файла скрипта. теперь команда истории будет работать в истории.
источник
У каждого пользователя есть свой собственный файл истории, который является результатом команды истории. Вместо использования команды истории в вашем скрипте вы можете использовать файл истории для пользователя. В
.bash_history
домашнем каталоге пользователя будет файл, который будет файлом истории для пользователя.источник
Краткий ответ :
использовать
history -p
для явного расширения истории.Пример следует.
Один случай использования часто случается для меня:
Так как мой bash был
set -o histexpand
, обычно я печаталредактировать файлы, перечисленные предыдущей командой.
К сожалению, иногда случается ошибка, поэтому я включаю проверку
shopt -s histverify
.Теперь я могу проверить расширение со стоимостью одного дополнительного Returnключа.
Сегодня я хочу обернуть эти детали в функцию bash, так как я часто их использую,
Здесь я использую два вложенных
command substitution
: внутренний для расширения!!
до предыдущей команды, внешний для выполнения и получения выходных данных.Теперь я могу добиться того же эффекта, используя только три ключа, и один из них есть Return!
источник