Наконец, я понял.
Проблема решается установкой ssl: check-hostname false
.
Чтобы выполнить команду с определенным рабочим каталогом, обычно делают
( cd directory && utility )
Круглые скобки вокруг cd ...
означают, что команды в нем выполняются в подоболочка. Изменение рабочего каталога в подоболочке делает так, что текущий рабочий каталог вызывающей оболочки не изменяется, т. е. после вызова этой команды вы все равно будете находиться в том же каталоге, откуда вы начали.
Пример:
( cd / && echo "$PWD" ) # will output "/"
echo "$PWD" # will output whatever directory you were in at the start
Это нельзя превратить в общий псевдоним, поскольку псевдоним не может принимать никаких аргументов.
Для конкретногокаталога и утилиты можно было бы сделать
alias cdrun='( cd "$HOME/somedir" && ./script.sh )'
, но в общем случае вам придется использовать функцию оболочки:
cdrun () {
( cd "$1" && shift && command "$@" )
}
или
cdrun () (
cd "$1" && shift && command "$@"
)
Замена фигурных скобок круглыми скобками вокруг тела функции заставляет функцию выполняться в своей собственной подоболочке.
Это будет использоваться как
$ cdrun "$HOME/somedir" ./script.sh
, который будет запускать скрипт script.sh
, расположенный в каталоге $HOME/somedir
, с $HOME/somedir
. ] в качестве рабочего каталога или
$ cdrun / ls -l
, который предоставит вам список каталогов в «длинном формате» корневого каталога.
Функция оболочки принимает свой первый аргумент и пытается перейти в этот каталог. Если это работает, он смещает имя каталога из позиционных параметров (список аргументов командной строки) и выполняет команду, заданную остальными аргументами. команда
— это встроенная в оболочку команда, которая просто выполняет свои аргументы как команду.
Все это нужно, если вы хотите выполнить команду с измененным рабочим каталогом. Если вы просто хотите выполнить команду, расположенную в другом месте, вы, очевидно, можете использовать
alias thing='$HOME/somedir/script.sh'
, но это запустит script.sh
, расположенный в $HOME/somedir
с currentв качестве рабочего каталога.
Другой способ выполнения скрипта, расположенного в другом месте, без изменения рабочего каталога — добавить местоположение скрипта в переменную окружения PATH
, например
PATH="$PATH:$HOME/somedir"
Теперь script.sh
в $HOME/somedir
можно будет запускать откуда угодно, просто используя
$ script.sh
Опять же, это неменяет рабочий каталог для команды.
Я использую эту функцию для запуска одной команды в другом каталоге:
cd1 () {
if [ $# -eq 1 ]; then
command cd -- "$1"
else
( command cd -- "$1" && shift && "$@" )
fi
}
Ограничение этой функции в том, что подстановочные знаки завершаются относительно исходного каталога, а не относительно каталога, в котором выполняется команда. В zsh можно сделать лучше.
Эта функция действует как обычная cd
, если вызывается с одним аргументом, поэтому вы можете назвать ее cd
. (Эта функция не поддерживает какие-либо параметры, но параметры cd
используются редко.)
Команды разделяйте точкой с запятой, например:
alias do_something='cd /tmp; ls'
alias <name-of-the-alias>='cd <the-directory> && <command>'
Итак, если вы хотите сменить каталог (cd) на папку /var/log/
и затем перечислите (ls) его файлы, которые вы можете добавить в свой файл .bash_profile
следующим образом:
alias logs='cd /var/log/ && ls'