У меня проблемы с получением псевдонимов для расширения моей учетной записи хостинга, когда я запускаю такую команду:
ssh user@server "bash -c \"alias\""
Мой файл .bashrc:
echo .bashrc
# .bashrc
shopt -s expand_aliases
# Source global definitions (commenting this out does nothing)
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# User specific aliases and functions
alias php="php55"
alias composer="php ~/bin/composer.phar"
Когда я запускаю указанную выше команду ssh, я вижу ".bashrc" echo'd. Но если я попытаюсь использовать псевдонимы, я ничего не получу.
Я мог бы попробовать "bash -ic", но это на самом деле в сценарии, который я не могу легко изменить, и я хочу знать, почему это не работает.
Выход из ssh user@server "bash -c \"shopt\""
.bashrc
autocd off
cdable_vars off
cdspell off
checkhash off
checkjobs off
checkwinsize off
cmdhist on
compat31 off
compat32 off
compat40 off
dirspell off
dotglob off
execfail off
expand_aliases off
extdebug off
extglob off
extquote on
failglob off
force_fignore on
globstar off
gnu_errfmt off
histappend off
histreedit off
histverify off
hostcomplete on
huponexit off
interactive_comments on
lithist off
login_shell off
mailwarn off
no_empty_cmd_completion off
nocaseglob off
nocasematch off
nullglob off
progcomp on
promptvars on
restricted_shell off
shift_verbose off
sourcepath on
xpg_echo off
Выход из ssh user@server "bash -c \"echo $SHELL\""
.bashrc
/bin/bash
$PATH
как~/bin:$PATH
это работает хорошо.~/.local/bin
время/etc/profile
обработки, оно автоматически добавит это в вашу переменную PATH. Вы также можете сразу. /etc/profile
после создания папки добавить ее в PATH без перезагрузки или выхода из системы / входа в систему.Ответы:
Со
bash(1)
страницы руководства :источник
shopt -s expand_aliases
.bashrc, но это не похоже на работу. Я не уверен, почему нет, но я думаю, что это будет нормальный ответshopt -s expand_aliases
в ваших.bashrc
до псевдонимов? Конечно, ваш выход в вопросе показывает ,expand_aliases
естьoff
.shopt
показывает, что она отключена. Может быть, есть какая-то странная настройка сервера, которая мешает этому, я не знаю. У меня есть обходной путь.bashrc
файл не был получен по умолчанию.Оболочка, которую вы получаете при удаленном выполнении команды с помощью SSH, не является ни интерактивной, ни оболочкой входа в систему:
(нет
i
и нетl
в ответе)В случае Bash это означает, что ни один из обычных файлов инициализации не читается.
Вы можете заставить удаленную оболочку быть оболочку входа в систему путем добавления
-l
к вашему Баш вызова, что означает , что он будет разобрать первый из~/.bash_profile
,~/.bash_login
и~/.profile
что он может найти, поиск в таком порядке, но не~/.bashrc
. Это означает, что вместо этого вам придется поместить псевдонимы в один из этих файлов.источник
У меня была такая же проблема, и сначала,
shopt -s expand_aliases
казалось, не помогло. Что я обнаружил, так это то, что эти параметры должны быть установлены до добавления реальных псевдонимов. Поэтому, если псевдонимы создаются до того, как вы.bashrc
установитеexpand_aliases
параметры, они не будут доступны. Поэтому вы должны загружать (или перезагружать) псевдонимы после установки параметра.источник
Баш (1) говорит
поэтому, очевидно, вы либо используете .bashrc вручную, либо запускаете его с -i
если псевдонимы - это все, что вам нужно, я бы порекомендовал разделить их, например, на .aliases, а затем получить их как из .bashrc, так и из вашего скрипта, на тот случай, если что-то выползет в .bashrc, что может нарушить ваш скрипт, как это часто бывает
источник
Вы можете решить любую проблему, введя:
на первой линии.
источник