У меня есть эта строка в моем, .bashrc
и я хотел бы знать, что именно это означает
# If not running interactively, don't do anything
[[ $- != *i* ]] && return
У меня есть эта строка в моем, .bashrc
и я хотел бы знать, что именно это означает
# If not running interactively, don't do anything
[[ $- != *i* ]] && return
Ответы:
$-
означает «текущие флаги».echo $-
возвращает "himBH". Это все по умолчанию.[[ $- != *i* ]] && return
фактически делает то, что сказано выше в комментарии: он проверяет, установлен ли интерактивный флаг. [[И]] делают его булевым, поэтому оно становится «истинным» или «ложным». «false && return» заставляет его продолжать «true && return» заставляет его выполнить возврат.Флаги по умолчанию объяснены более подробно:
h предназначен для «hash all»: это говорит bash запоминать расположение команд, найденных при запросе вашего PATH.
я для "интерактивного": ввод ввода и получение вывода.
м для «монитора»: это позволяет контролировать работу
B для "расширения скобки". Это позволяет использовать расширение скобки
H для "расширения истории". Это то, что позволяет вам повторно запустить команду из вашей истории, предварительно указав ее номер с восклицательным знаком.
Кстати. Я имею ...
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
По сути, делает то же самое, но я думаю, что его легче читать.
В основном это означает, что «если флаги оболочки не содержат строчную букву i, остановите функцию / скрипт здесь».
[[ ]]
обозначает условное выражение в bash
$-
означает флаги оболочки. Он будет содержать «i», если оболочка является интерактивной (т. Е. Вы можете вводить команды, а не выполнять сценарий)
!=
просто означает «не равно».
*i*
шаблон подстановочного знака, который соответствует чему-либо, содержащему «я»
return
без аргументов означает просто остановить выполнение текущей функции или скрипта.
&&
является логическим оператором И Выражение справа в этом случае return
будет оцениваться (выполняться) только в том случае , если выражение слева равно true . Так что во многих языках программирования a && b
это сокращение для if a then b
- это называется «оценка короткого замыкания», и это приводит учителей программирования в бешенство, когда вы его используете: D
Я хотел бы предположить, что это как говорится: если bash не открыт в интерактивной оболочке, то ничего не делайте.
Я не знаю всей функции, но, вероятно, под этой строкой установлены команды и флаги на тот случай, если у вас открыт bash в TTY.
$-
и*i*
и как это выяснить , является ли его интерактивный режим или нет