Подтвердить что ты не робот

Выполнение команды ssh не учитывает .bashrc |.bash_login |.ssh/гс?

Я пытаюсь выполнить команду удаленно через ssh, например:

ssh <user>@<host> <command>

Команда, которая должна быть выполнена, является псевдонимом, который определен в .bashrc, например.

alias ll='ls -al'

Итак, что в итоге должна выполняться следующая команда:

ssh [email protected] "ll"

Я уже выяснил, что .bashrc получает только исходные тексты с интерактивной оболочкой, поэтому в .bash_login я поставил:

if [ -f ~/.bashrc ]; then
  . ~/.bashrc
fi

и я также попытался определить псевдоним непосредственно в .bash_login.

Я также попытался установить определение/источник псевдонимов .bashrc в .bash_profile, а также в .ssh/rc. Но ничего из этого не работает. Обратите внимание, что я не могу изменить способ запуска команды ssh, поскольку это часть некоторой двоичной установки script. Единственное, что я могу изменить, это окружающая среда. Есть ли другая возможность получить этот псевдоним, полученный при выполнении команды ssh? Есть ли какая-то конфигурация ssh, которая должна быть адаптирована?

4b9b3361

Ответ 1

Из man-страниц bash:

Псевдонимы не расширяются, если оболочка не является интерактивной, если параметр оболочки expand_aliases не установлен с помощью shopt

Есть несколько способов сделать это, но самым простым является просто добавить следующую строку в ваш файл .bashrc:

shopt -s expand_aliases

Ответ 2

Вместо:

ssh [email protected] "bash -c ll"

попробовать:

ssh [email protected] "bash -ic ll"

чтобы заставить bash использовать "интерактивную оболочку".

Ответ 3

EDIT:

Как указано здесь о неинтерактивных оболочках..


 # If not running interactively, don't do anything
[ -z "$PS1" ] && return
 # execution returns after this line

Теперь, для каждого псевдонима в вашем файле bashrc скажите, что у меня есть:


alias ll="ls -l"
alias cls="clear;ls" 

Создайте файл с именем после этого псевдонима для ll:

[email protected]$ vi ssh_aliases/ll
#inside ll,write
ls -l
[email protected]$ chmod a+x ll

Теперь отредактируйте .bashrc, чтобы включить:


 # If not running interactively, don't do anything
[ -z "$PS1" ] && export $PATH=$PATH:~/ssh_aliases

Это делает работу. Хотя я не уверен, что это лучший способ сделать это
ИЗМЕНИТЬ (2)
Вам нужно сделать это только для псевдонимов, другие команды в bashrc будут выполняться, как указал Дэвид, "у вас должен быть исполняемый файл ssh для запуска команд".

Ответ 4

альтернативой псевдониму, который будет отображаться во всех script, является ЭКСПОРТ и EXECUTE VARIABLE

# shortcut to set enviroment to insensitive case
export go_I="shopt -s nocasematch"

Теперь в любом script вы можете использовать

#!/bin/bash $go_I # go Insensitive [[ a == A ]] # evaluates TRUE ( $? == 0) $go_C # maibe want to go back to casesensitive

полезно поместить все ярлыки/псевдонимы в /путь/в/my_commands и отредактировать /etc/bash.bashrc

source /path/to/my_commands

Ответ 5

Откройте файл ~/.bash_profile. Если этот файл не существует, создайте его в домашнем каталоге и добавьте следующую строку

source = $HOME/.bashrc

выйдите из своего ssh и войдите в систему, и вы должны настроить параметры .bashrc.