Вызов “истории” управляет в рамках сценария оболочки VIM

Общий новичок программирования, вероятно, чрезвычайно наивный - терпят меня.

Как часть текущего присвоения, нам дали задачу группировки определенных команд в сценарий оболочки. (дата, имя хоста, дуга... и т.д.... вершина, история), с помощью 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 отсылаю к строке текстового документа / сценарий.

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

Спасибо за внимание!

0
задан 31 March 2020 в 21:56

2 ответа

Путем ввода 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"
1
ответ дан 7 April 2020 в 23:23

В дополнение к ответу 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.
0
ответ дан 7 April 2020 в 23:23

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

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