2009-07-29 13 views
39

próbuję wykonać polecenie zdalnie przez ssh, przykład:Wykonanie komendy ssh nie uwzględnia .bashrc | .bash_login | .ssh/rc?

ssh <user>@<host> <command> 

Komenda która musi być wykonywana jest alias, który jest zdefiniowany w .bashrc, np

alias ll='ls -al' 

Więc co w końcu następujące polecenie powinno zostanie wykonany:

ssh [email protected] "ll" 

już okazało się, że .bashrc tylko dostaje pozyskiwane z interaktywnej powłoki, więc w .bash_login kładę:

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

i próbowałem również zdefiniować alias bezpośrednio w .bash_login.

Próbowałem również umieścić definicję/źródło aliasów .bashrc w .bash_profile, a także w .ssh/rc. Ale nic z tego nie działa. Należy zauważyć, że nie jestem w stanie zmienić sposobu wywoływania polecenia ssh, ponieważ jest to część binarnego skryptu instalacyjnego. Jedyne, co mogę zmodyfikować, to środowisko. Czy istnieje jakakolwiek inna możliwość uzyskania tego aliasu, gdy polecenie ssh zostanie wykonane? Czy jest jakaś konfiguracja ssh, którą należy zaadaptować?

+0

Która maszyna są te pliki (.bashrc, itd.) W sprawie? Maszyna, do której się zbliżasz, lub do tej, z której się przesiadasz? –

+0

Pliki znajdują się na komputerze Jestem ssh-ing do – blackicecube

+1

Również już sprawdziłem/etc/passwd dla mojego użytkownika. Ma zdefiniowane/usr/bin/bash. – blackicecube

Odpowiedz

7

EDIT:

Jak wskazano here o nieinterakcyjnych muszli ..


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

Teraz dla każdego aliasu w pliku bashrc powiedzieć mam:


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

Utwórz plik o nazwie podanym dla tego aliasu dla ll:

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

Teraz edytować .bashrc obejmuje:


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

ta spełnia swoje zadanie .. chociaż nie jestem pewien, czy jest to najlepszy sposób to zrobić
EDIT (2)
You wystarczy zrobić to dla aliasów, inne polecenia w bashrc zostaną wykonane, jak wskazał David "musisz mieć wykonywalny, aby ssh uruchamiał polecenia".

+0

Dzięki za sugestię. Aliasy wywoływane przez skrypt instalacyjny są zdefiniowane w niestandardowym bashrc leżącym gdzieś w katalogu instalacyjnym. W tym niestandardowym bashrcu oprócz aliasów jest również dużo eksportu zdefiniowanych zmiennych. Więc z twoim rozwiązaniem musiałbym utworzyć plik dla każdego aliasu/eksportu? – blackicecube

+0

mam nadzieję, że działa teraz dla Ciebie .. – sud03r

+0

Po prostu próbowałem, niestety nadal nie działa. Nie jestem pewien, ale wygląda na to, że .bashrc nie jest pozyskiwany podczas wywoływania ssh. – blackicecube

33

ze stron człowiekiem bash:

Aliasy nie są interpretowane, gdy powłoka nie jest interaktywna, chyba że opcja expand_aliases powłoka jest ustawiana za pomocą shopt

Istnieje kilka sposobów na to, to, ale najprościej jest po prostu dodać następującą linię do pliku .bashrc:

shopt -s expand_aliases 
+0

Przegapiłem ciebie, ale powinieneś wyjaśnić, co robi. – bradlis7

+1

Jak wyjaśniono w innym miejscu tutaj, powłoka nie jest w trybie interaktywnym. Umożliwi to opcję rozszerzenia aliasów. Z dokumentacji: Po ustawieniu aliasy są rozwijane zgodnie z opisem powyżej w części ALIASES. Ta opcja jest domyślnie włączona dla powłok interaktywnych. –

+0

Tak, znalazłem to, sugerowałem tylko, aby dodać go do swojego komentarza. Próbowałem wykonać to polecenie w 'ssh $ HOST 'shopt -s expand_aliases; Tak, ale to nie zadziałało. Prawdopodobnie działa, jeśli umieścisz go w .bashrc, ale go nie wypróbowałem. – bradlis7

24

I nstead od:

ssh [email protected] "bash -c ll" 

Spróbuj:

ssh [email protected] "bash -ic ll" 

zmusić bash do korzystania z "interaktywną powłokę".

+4

Dla mnie, musiałem użyć 'ssh user @ host" bash -lc ll "' - an zamiast l. (Lima zamiast Indii.) – richardkmiller

+0

Próbowałem z '-ic' i działałem doskonale! Dzięki! – CodeWarrior

+0

Ale czy to znaczy, że muszę dodać każdy alias w wywołaniu SSH? Odnoszę się do" ll "części" ssh user @ host "bash -ic ll" " –

-3

Otwórz plik ~/.bash_profile. Jeśli ten plik nie istnieje, utwórz je w katalogu domowym i dodać poniższy wiersz

source = $ HOME/.bashrc

zjazd swoją ssh i zalogować agian i powinieneś dostać ustawienia .bashrc pracujących dla Ciebie.

+0

To prawdopodobnie powinno być' source $ HOME/.bashrc' lub '. $ HOME/.bashrc'. –

-1

alternatywą dla aliasu, które będą widoczne w całej skryptu jest EXPORT & EXECUTE ZMIENNA

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

Teraz w każdym skrypcie można użyć

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

to użyteczne umieścić wszystkie skróty/aliasy w /path/to/my_commands i edytować /etc/bash.bashrc

source /path/to/my_commands

+0

To nie odpowiada na pytanie. – reinierpost

Powiązane problemy