Возвращать код выхода, не убивая терминал вызывающего пользователя?

Используя nokogiri, можно использовать простой запрос на основе CSS для извлечения внутреннего текста тега:

 $ nokogiri -e 'puts $_.at_css("title").content'
 Why Are Bad Words Bad? - YouTube

Аналогично, чтобы извлечь значение атрибута "content" тега:

$ nokogiri -e 'puts $_.at_css("meta[name=title]").attr("content")'
Why Are Bad Words Bad?
1
09.03.2016, 22:12
3 ответа

Суть проблемы в том, что вы получаете (. ) сценарий, а не просто выполняете их ( ./ script2.sh или / bin / bash script2 .sh ).

Если вам действительно нужен исходный код , они сделают это в подоболочке (. ./Myscript2.sh args)

Если вы можете нормально выполнить скрипты, которые вы может хранить в переменной код выхода, который автоматически обновляется после каждого выполнения в $? .

./myscript2.sh arg1
FirstExitCode=$?
./myscript2.sh arg2
SecondExitCode=$?
 ...

Подробнее об источнике при помощи .

1
27.01.2020, 23:19

Основываясь на ответе Хастура о сорсинге, кажется, это то, что мне нужно в second.sh, чтобы вернуть статус, не убивая терминал:

#!/usr/bin/env bash
...

# if success, return 0
[ "$0" = "$BASH_SOURCE" ] && exit 0 || return 0

# else for failure, return non-0
[ "$0" = "$BASH_SOURCE" ] && exit 1 || return 1
1
27.01.2020, 23:19

Один, возможно, не идеальный способ - сделать alias exit=return, который затем заставляет second.sh выходить из сценария и возвращаться вместо этого, с указанным кодом. Это, конечно, не разрезает вложенность функций, как это делает exit, но должно хорошо работать для вызовов верхнего уровня exit.

Возможно, со временем вам понадобится unalias exit.

2
27.01.2020, 23:19

Теги

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