LINUX.ORG.RU

Проверка параметров запуска bash

 


0

3

Какой способ проверки шелла на интерактивность более правильный?
1.

if [[ $- =~ i ]]; then
  команда
fi
2.
if [ -z $PS1 ]; then
  команда
fi
И есть ещё какой-то способ для bash старых версий, в которых ещё не было оператора «=~»?

Какой способ проверки шелла на login_shell более правильный?
3.
if [[ $BASHOPTS =~ login_shell ]]; then
  команда
fi
4. поместить команду в .bash_profile

★★★★★

Ответ на: комментарий от anonymous

В принципе можно к слову «правильный» не придираться. Просто интересует как это другие админы делают, и вообще способы «с башизмами», «без башизмов».

sunny1983 ★★★★★ ()
Ответ на: комментарий от sunny1983

т.е. в документации написано:

PS1 is set and $- includes i if bash is interactive, allowing a shell script or a startup file to test this state.

но тебе все равно еще нужно чье-то мнение? будь мужиком, блеать, прими решение, а если возникнут проблемы, вот тогда и будешь думать

anonymous ()

И есть ещё какой-то способ для bash старых версий, в которых ещё не было оператора «=~»?

Оператор ==, разумеется.

Какой способ проверки шелла на интерактивность более правильный?

А зачем вам вообще проверять интерактивность? Возможно вы что-то не то делаете?

Zmicier ★★★★★ ()
Ответ на: комментарий от Zmicier

Ну например, я поместил запуск чего-нубудь в /etc/bashrc и оно запустилось когда я копирую на сервер файлы по CSP, то есть в неинтерактивном режиме. Непорядок!

sunny1983 ★★★★★ ()
Ответ на: комментарий от sunny1983

я поместил запуск чего-нубудь в /etc/bashrc

Вопрос был как-раз про это самое «что-нибудь».

Почему я спрашиваю — в ряде случаев логичным может оказаться проверять не столько флаг интерактивности, сколько, например, наличие наличие подключенного телетайпа к стандартному вводу / выводу / выводу ошибки, на примере последнего:

[[ -t 2 ]]
Zmicier ★★★★★ ()
Ответ на: комментарий от sunny1983

А что касается проверки интерактивности, то: (1) использовать регулярные выражения (=~) я не вижу никакого смысла даже в современных ГНУ Башах, где они есть, — используйте ==: [[ $- == *i* ]]; (2) в [ -z $PS1 ] вы пропустили вторую пару скобок: [[ -z $PS1 ]] (и я надеюсь, вы улавливается, что, в отличие от первого, это проверка на неинтерактивность, на интерактивность же просто [[ $PS1 ]]).

Zmicier ★★★★★ ()

я использую первый способ

teod0r ★★★★★ ()
Ответ на: комментарий от Zmicier

вы пропустили вторую пару скобок ... и я надеюсь, вы улавливается

Не совсем улавливаю. Двойные скобки как сказано тут также как и одинарные служат для проверки условий, но они ещё и экранируют определённые символы, чтобы не было ошибки. А переменную в кавычки при использовании двойных скобок заключать не надо?

sunny1983 ★★★★★ ()
Ответ на: комментарий от sunny1983

Не совсем улавливаю.

Уловление я поминал в контексте того, что [[ $- == *i* ]] и [[ -z $PS1 ]] суть диаметрально противоположные условия, что тут может быть непонятного? Или вы только про двойные скобки?

Двойные скобки, как сказано тут, также как и одинарные служат для проверки условий, но они ещё и экранируют определённые символы, чтобы не было ошибки.

Двойные скобки — полноценный оператор проверки всяких разных условий, одинарные — элемент совместимости со устаревшими версиями, а также менее развитыми языками.

А переменную в кавычки при использовании двойных скобок заключать не надо?

В левой или единственной части — нет, но и не воспрещается. В правой части операторов == или !=: переменную, что должна содержать строковый литерал — надо, а что должна содержать глоб-выражение — не надо.

Zmicier ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.