Я являюсь все еще довольно новым для избиения сценариев, и мне нужен очень простой сценарий что, если существует история команд, дисплеи они, и, если нет, сообщает пользователю, что нет никакой истории команд.
Что я имею, до сих пор это:
#!/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.
Что точно идет не так, как надо и как я могу адаптировать или переписать этот сценарий для работы?
if [ "$(history | wc -l)" -gt 0 ] ...
, см. man bash
под CONDITIONAL EXPRESSIONS
, [
совпадает с test
, таким образом man test
скажет больше об этом.
НЕ ПРОВЕРЕННЫЙ ФАКТ: (из памяти!)
Теперь, обратите внимание на то, что запуская сценарий удара делает его волшебство путем запуска нового "удара" (исполняемый файл); это приводит к тому, что история на той сессии удара (в то время как сценарий работает) будет чем-то еще, чем, что Вы имеете на сессии, где Вы запустили сценарий.
, Чтобы смочь проверить историю в ТЕКУЩУЮ сессию, необходимо будет сделать это по-другому:
Один путь состоит в том, чтобы заставить Ваш "сценарий" быть функцией удара, например, в $HOME/.bashrc и затем использовать функцию.
, С другой стороны, помещают функцию в отдельный файл и source scriptfile.sh
, чтобы заставить его появиться и работать на текущей сессии удара.
[еще 1112]:
то, что Вы запускаете сценарий, будет зарегистрировано в истории. Я не уверен, что у Вас когда-либо будет меньше чем одна строка в истории, когда сценарий будет работать.