"Історія" припиняє роботу при запуску всередині bash-скрипту


9

Я пишу простий сценарій, щоб зібрати мою історію баш, щоб знайти певний рядок. У командному рядку я можу зробити наступне, що добре працює:

history | grep git

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

#!/bin/bash
history | grep git

Коли я видаляю перший рядок #!/bin/bash, мій сценарій знову працює. Що тут відбувається? Як я можу використовувати historyскрипт bash?

Відповіді:


8

Далі йдеться про це bash 4.0 or higher only, але це робить трюк. :)

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

Працює! Спробуй. ( -i= Я Інтерактивно, прапор НЕ доступний для Баш 3.х і раніше)


Дякую також чуваку, який нещодавно прихильнив мене лише тому, що може. (Можливо, bashкористувач v3, просто розчарування, ха-ха). Принаймні, для Мартіна моє рішення мало велику допомогу, це (принаймні) комфорт.
синтаксичний помилок

У мене виникло те саме питання, коли я писав інструмент, який записує роботу після робочої години для інженерів з підтримки 24/7 .. дякую!
Генрі ван Меген

14

Коли ви запускаєте скрипт bash shell, наприклад, запускаючи виконуваний файл, рядок 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. Пошук файлу (наприклад, з .) не є тим самим, як запуск сценарію, тому що команди виконуються в поточній оболонці, в якій увімкнена історія.


А як же робити history -aвідразу після встановленої команди, щоб переконатися, що останні команди додаються до файлу спочатку?

4
@ iluminÉ: не допоможе. Оболонка, що почала виконувати сценарій, - це абсолютно різний процес; це починається з першої порожньої історії.
rici
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.