Выполнение команд, выводимых на стандартный вывод

Проверьте, увеличивался ли номер истории. Отмененная подсказка или подсказка, в которой пользователь только что нажал Enter , не увеличивают номер истории.

Номер истории доступен в переменной HISTCMD , но недоступен в PROMPT_COMMAND (потому что то, что вы хотите, это фактически номер истории предыдущей команды; команда, которая выполняет PROMPT_COMMAND сама не имеет номера истории). Вы можете получить число из вывода fc .

prompt_command () {
  HISTCMD_previous=$(fc -l -1); HISTCMD_previous=${HISTCMD_previous%%$'[\t ]'*}
  if [[ -z $HISTCMD_before_last ]]; then
    # initial prompt
  elif [[ $HISTCMD_before_last = "$HISTCMD_previous" ]]; then
    # cancelled prompt
  else
    # a command was run
  fi
  HISTCMD_before_last=$HISTCMD_previous
}
PROMPT_COMMAND='prompt_command'

Обратите внимание, что если вы включили сжатие дубликатов в истории ( HISTCONTROL = ignoredups или HISTCONTROL = erasedups ), это будет ошибочно сообщать о пустой команде после выполнения двух одинаковых команды подряд.

2
26.04.2018, 22:39
3 ответа

Просто подключите их к своей оболочке:

$ printf 'echo foo\necho bar\n' | bash
foo
bar
6
27.01.2020, 21:49

Вам даже не нужно трубить, так как вы и так живете опасно; просто запустите свою команду, которая всегда выводит только безопасные команды для выполнения в конструкции расширения подоболочки:

$ $( awk 'BEGIN { print "echo hello" }' )
hello
2
27.01.2020, 21:49

Для чего-то более сложного, чем простая команда (и простые команды тоже, конечно):

eval "$( awk... )"

Это запустит код в среде текущей оболочки, и, следовательно, код может также установить переменные модификации och в вашей оболочке.

Однако, поскольку вы, очевидно, хотите проанализировать другие файлы с помощью grep, почему бы не сделать это той же программой awk?... или с другой программой awk, которая читает шаблоны и имена файлов?

6
27.01.2020, 21:49

Теги

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