Как я могу протестировать, если существуют записи в терминальной истории команд в ударе?

Я являюсь все еще довольно новым для избиения сценариев, и мне нужен очень простой сценарий что, если существует история команд, дисплеи они, и, если нет, сообщает пользователю, что нет никакой истории команд.

Что я имею, до сих пор это:

#!/bin/bash

if [ -n "$(history)" ]
    then
        history
    else
        echo "No entered commands."
fi

Но, неважно, ли история имеет или не была очищена с history -c, вышеупомянутые возвраты сценария:

/path/to/script.sh: 3: history: not found
No entered commands.

Что точно идет не так, как надо и как я могу адаптировать или переписать этот сценарий для работы?

1
задан 1 December 2019 в 11:36

1 ответ

if [ "$(history | wc -l)" -gt 0 ] ..., см. man bash под CONDITIONAL EXPRESSIONS, [ совпадает с test, таким образом man test скажет больше об этом.

НЕ ПРОВЕРЕННЫЙ ФАКТ: (из памяти!)
Теперь, обратите внимание на то, что запуская сценарий удара делает его волшебство путем запуска нового "удара" (исполняемый файл); это приводит к тому, что история на той сессии удара (в то время как сценарий работает) будет чем-то еще, чем, что Вы имеете на сессии, где Вы запустили сценарий.

, Чтобы смочь проверить историю в ТЕКУЩУЮ сессию, необходимо будет сделать это по-другому:
Один путь состоит в том, чтобы заставить Ваш "сценарий" быть функцией удара, например, в $HOME/.bashrc и затем использовать функцию.
, С другой стороны, помещают функцию в отдельный файл и source scriptfile.sh, чтобы заставить его появиться и работать на текущей сессии удара.

[еще 1112]:
то, что Вы запускаете сценарий, будет зарегистрировано в истории. Я не уверен, что у Вас когда-либо будет меньше чем одна строка в истории, когда сценарий будет работать.

1
ответ дан 7 December 2019 в 14:55

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

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