«History» перестает работать при запуске внутри сценария bash
Я пишу простой скрипт для grep моей истории bash, чтобы найти определенную строку. В командной строке я могу сделать следующее, которое отлично работает:
history | grep git
Однако, когда я создаю скрипт bash с той же командой, что и выше, внезапно history
ничего не возвращает:
- Как использовать namedpipe как временный файл?
- Сценарий Bash для автоматического резервного копирования tar выбранных файлов и каталогов
- Использование $ в пароле
- Правильное совпадение слов
- bash scripting добавить аргументы
#!/bin/bash history | grep git
Когда я удаляю первую строку #!/bin/bash
, мой скрипт работает снова. Что здесь происходит? Как я могу использовать history
внутри сценария bash?
- Можно ли изменить файл yml с помощью сценария оболочки?
- Текстовый интерфейс пользователя
- Проблемы при разметке eMMC с использованием sfdisk
- Позиция курсора в vi при открытии файла
- Убедитесь, что файловый сокет уже открыт
- изменение нумерации нескольких файлов
- Как выполнить операцию «&» последовательно
- 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. Поиск файла (например, с .
) Не совпадает с запуском скрипта, потому что команды запускаются в текущей оболочке, которая имеет историю.