Общий новичок программирования, вероятно, чрезвычайно наивный - терпят меня.
Как часть текущего присвоения, нам дали задачу группировки определенных команд в сценарий оболочки. (дата, имя хоста, дуга... и т.д.... вершина, история), с помощью VIM для ввода сценария.
Мой сценарий является чрезвычайно основным, делает свободное использование "эха" для создания пустых строк для легкой удобочитаемости. У меня есть почти все работа - кроме каждого раза, когда я выполняю сценарий оболочки, он перестал работать, когда он достигает команды "истории".
Сегмент сценария:
echo Finally, here is the output of the history command
echo
history
echo
echo -------------THE END---------------------
Но после запущения скрипта (использующий "sh [имя файла] .sh"), выходные чтения:
[filename].sh: 66: [filename].sh: history: not found
Я рисунок 66 отсылаю к строке текстового документа / сценарий.
Кто-либо может помочь мне получить эту работу? Я чувствую, что это должно быть настолько просто, но я попробовал многочисленные изменения, и встречен этим "не найденным" сообщение каждый раз.
Спасибо за внимание!
Путем ввода sh shellattempt2.sh
, Вы, вероятно, вынуждаете сценарий интерпретироваться с помощью /bin/sh
интерпретатор оболочки - который, на Ubuntu, dash
не колотят по умолчанию
Оболочка тире не имеет history
так вот почему Вы получаете ошибку
[filename].sh: 66: [filename].sh: history: not found
Вместо этого удостоверьтесь, что Ваш сценарий имеет соответствующее shebang
как первая строка
#!/bin/bash
затем сделайте это исполняемым файлом (chmod +x [filename].sh
) и затем выполненный это использование
./[filename].sh
ОДНАКО bash
только включает историю по умолчанию в интерактивных оболочках. Самый простой способ получить доступ к истории оболочки из сценария (который работает в его собственной неинтерактивной оболочке) состоит в том, чтобы, вероятно, непосредственно посмотреть на сам файл истории, напр.
cat "$HISTFILE"
В дополнение к ответу steeldriver, для вывода истории текущей сессии удара в случае, если, если Вы добавили #!/bin/bash
, Вы могли использовать source
функция:
source shellattempt2.sh
Из-за с #!/bin/bash
добавленный на текущей сессии удара нет никакого вывода истории.
Если Вы заменяете history
cat $HISTFILE
или cat "$HISTFILE"
также используйте source
. Но это производит не текущую историю сессии удара.
source --help
source: source filename [arguments]
Execute commands from a file in the current shell.
Read and execute commands from FILENAME in the current shell. The
entries in $PATH are used to find the directory containing FILENAME.
If any ARGUMENTS are supplied, they become the positional parameters
when FILENAME is executed.
Exit Status:
Returns the status of the last command executed in FILENAME; fails if
FILENAME cannot be read.