«History» перестает работать при запуске внутри сценария bash

Я пишу простой скрипт для grep моей истории bash, чтобы найти определенную строку. В командной строке я могу сделать следующее, которое отлично работает:

history | grep git 

Однако, когда я создаю скрипт bash с той же командой, что и выше, внезапно history ничего не возвращает:

 #!/bin/bash history | grep git 

Когда я удаляю первую строку #!/bin/bash , мой скрипт работает снова. Что здесь происходит? Как я могу использовать history внутри сценария bash?

2 Solutions collect form web for “«History» перестает работать при запуске внутри сценария bash”

Ниже приведены только для bash 4.0 or higher only , но это трюк. 🙂

 #!/bin/bash -i history | grep sometext 

Работает! Попробуйте. ( -i = i nteractive, флаг недоступен для bash 3.x и ранее)

Когда вы запускаете сценарий оболочки bash, например, запустив исполняемый файл, чья строка shebang равна #!/bin/bash , скрипт запускается в неинтерактивной оболочке. Одной из особенностей неинтерактивной оболочки является то, что история отключена. Поэтому, если вы хотите, чтобы ваш скрипт мог использовать историю, вам нужно сделать что-то вроде этого:

 #!/bin/bash HISTFILE=~/.bash_history # Or wherever you bash history file lives set -o history # enable history history | grep git 

Конечно, в этом случае вы могли бы просто сделать:

 grep git ~/.bash_history 

Поскольку оба вышеуказанного требуют обновления файла истории ( ~/.bash_history ), чего почти наверняка не будет.

Я не уверен, как вы запускаете свой скрипт после удаления строки shebang. Поиск файла (например, с . ) Не совпадает с запуском скрипта, потому что команды запускаются в текущей оболочке, которая имеет историю.

  • Тысяча разделителей в awk
  • Определить сеанс tmux, к которому относится сеанс оболочки?
  • Понимание скрипта оболочки iptables
  • Подождите, пока процесс переднего плана испустит строку, затем отправьте на задний план
  • grep переменная в выражении if
  • Многострочные комментарии сценария оболочки - как это работает?
  • Что быстрее - сценарии C или оболочки - и почему?
  • Как распространять значение переменной
  • Искать каталоги для многострочной строки
  • whiptail требует трех чисел, прежде чем продолжить
  • Полные пары ключевых значений
  • Interesting Posts

    Для запуска скрипта требуется две команды с nohup

    Msgstr "sudo: apt-get: команда не найдена." После удаления некоторых пакетов

    Как остановить появление ^ T% в первой строке, когда я открываю новую lxterminal tab с ^ T в zsh?

    Обратитесь к переменной цикла в аргументе

    Как интерпретировать «верхний» вывод busybox?

    Почему существуют символические ссылки в / dev? (LVM)

    Печать на клиент ubuntu через сеть, используя php, который находится в веб-сервере Windows 7

    Запуск приложения, составленного на другом дистрибутиве

    Как использовать awk для исправления и унификации поврежденного файла с несколькими столбцами и строками?

    Недавно установленный CentOS 6 показывает квадраты вместо букв

    Как форматировать потоковый вывод JSON из Node.js?

    Идентификация дисков во время установки RHEL / CentOS / Fedora

    ядро dotnet на 32-битном Ubuntu

    То же значение соли / хеша в / etc / shadow

    Разница между «эхом» и «эхом -e»

    Linux и Unix - лучшая ОС в мире.