Сделать "." и "source" по умолчанию в ~/.zshrc

if command; then ...

оценивает статус выхода команды. 0 - успех (оценивает условие как true).

Прежде всего: [ (почти) идентичен test, поэтому он ожидает, что строка command будет соответствовать его синтаксису.

if [ $(command) ]; then ...

оценивает строку, содержащую вывод command. В большинстве случаев это не сработает - см. пример ниже.

[ command ] && ..

grep -l "mail" "file" будет интерпретирован следующим образом:

  • grep - строка
  • -l - унарный оператор, возвращающий длину следующей строки
  • "mail" - строка, будет передана в качестве аргумента оператору -l
  • "file" - строка

В зависимости от реализации вы получите немного разные ошибки, потому что выше приведена просьба [ оценить последовательность, состоящую из строки, числа и другой строки, без каких-либо операторов. По умолчанию [ (как и test) является встроенной оболочкой, вы можете сравнить сообщения об ошибках с отдельным бинарником (обычно /bin/[ или /usr/bin/[).

4
29.11.2016, 23:25
2 ответа

Это потенциально может быть сделано с помощью ужасных вещей с помощью accept-line :

function _accept-line() {
    if [[ $BUFFER == "." ]]; then
        BUFFER="source ~/.zshrc"
    fi
    zle .accept-line
} 

zle -N accept-line _accept-line
9
27.01.2020, 20:49

Напишите функцию для которая вызывает . встроенную функцию по мере необходимости. Кроме того, == некорректен для числовых сравнений в shell (test странный такой, и требует -eq или -ne).

function . {
    if [[ $# -eq 0 ]]; then
        builtin . ~/.zshrc
    else
        builtin . "$@"
    fi
}
1
27.01.2020, 20:49

Теги

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