Как я использую функциональный возврат в качестве условия если еще затем ярлык?

Одна причина это могло произойти, состоит в том, что оболочки не выходят обычно, или Вы ищете обновления, когда оболочки все еще работают.

Для тестирования этого сценария попробовать history -a после некоторой уникальной команды, как echo abacaba на рабочей оболочке и затем запускают новую оболочку. Если новая оболочка получает обновления сначала, то запись и чтение файла истории работают. Однако, если бы это не работает, что-то еще неправильно, и я лично использовал бы strace в попытке диагностировать.

Другая вещь проверить состоит в том, что ДОМАШНЯЯ переменная не изменилась и установлена на тот же путь, как начато passwd файл для пользователя.

Используя strace для диагностирования

  • в оболочке, echo abacaba; echo $$
  • в другой оболочке, strace -o e -s 256 -p $PID, где $PID = $$ вывод от первой оболочки
  • в первой оболочке, history -a
  • остановите strace и просмотрите его для обработки history -a; там должно быть открыто () и запись () вызовы.

Неинтерактивные оболочки

Это нечетно, что неинтерактивные оболочки не получают историю оболочки, но это могло быть объяснено многими вещами. Больше диагностики поможет.

Strace может снова использоваться для помощи на том конце, если запуск неинтерактивных оболочек может быть изменен для вставки strace. Например, следующие шоу команда запуска оболочки, измененная для использования strace:

bash /home/jack/bin/jacks_script
strace -f -o /tmp/e -s 512 bash /home/jack/bin/jacks_script

Конечно, если больше чем одно из этих выполнений за один раз, /tmp/e будет перезаписан.

Используя grep open /tmp/e, полный путь в bash_history файл должен обнаружиться, если оболочка загружается он. Так, эта команда позволяет две проверки: (1) то, что файл истории открывается и читается и (2) то, что путь к файлу истории как ожидалось.

Без strace

Проверьте, что оболочка имеет history набор опции (set -o history для удара).

Одна вещь, которая неясна, состоит в том как раз в то самое время, когда HISTFILE проверяется оболочкой. Например, если это установлено в .bash_profile, Я не уверен, возьмет ли это влияние для чтения истории оболочки, потому что это после того, как оболочка запускается, но прежде чем первая командная строка будет дана пользователю.

3
29.01.2015, 19:00
2 ответа

Предполагая, что вы хотите использовать A && B || C , затем просто вызовите функцию напрямую:

tst && echo "success" || echo "failure"

Если вы хотите использовать [[[, вам нужно использовать значение выхода:

tst
if [[ $? -eq 0 ]]
then 
    ...
9
27.01.2020, 21:08

(Это не совсем ответ, больше комментариев)

Вы должны быть немного осторожны в A && B || C Сочетания:

  • Если Возвращает A A Возвращает успех, то B выполнен
  • , если B впоследствии возвращает состояние выхода, затем C тоже будет выполнен.
$ [[ -f /etc/passwd ]] && { echo "file exists"; false; } || echo "file does not exist"
file exists
file does not exist

Если A; тогда б; остальное c; ФИ в этом отношении безопаснее, в этом C не зависит от B , только A

$ if [[ -f /etc/passwd ]];then { echo "file exists"; false; }; else echo "file does not exist"; fi
file exists
$ echo $?
1
4
27.01.2020, 21:08

Теги

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