Mam problem z rozszerzeniem aliasów na moim koncie hostingowym, gdy uruchamiam polecenie takie jak:
ssh user@server "bash -c \"alias\""
Mój plik .bashrc to:
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"
Kiedy uruchamiam powyższe polecenie ssh, widzę echo „.bashrc”. Ale jeśli spróbuję uruchomić aliasy, nic nie dostanę.
Mógłbym spróbować „bash -ic”, ale tak naprawdę jest to skrypt, którego nie mogę łatwo zmienić i chcę wiedzieć, dlaczego to nie działa.
Wyjście z 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
Wyjście z ssh user@server "bash -c \"echo $SHELL\""
.bashrc
/bin/bash
$PATH
ponieważ~/bin:$PATH
działa dobrze.~/.local/bin
, gdy/etc/profile
są przetwarzane automatycznie dodać, że do PATH. Możesz także zaraz. /etc/profile
po utworzeniu folderu, aby dodać go do PATH bez ponownego uruchamiania komputera lub wylogowywania / logowania.Odpowiedzi:
Ze strony podręcznika
bash(1)
:źródło
shopt -s expand_aliases
w moim .bashrc, ale to chyba nie działa. Nie jestem pewien, dlaczego nie, ale myślę, że to normalna odpowiedźshopt -s expand_aliases
jest w tobie.bashrc
? Oczywiście, swoją moc w pokazach zapytaniaexpand_aliases
jestoff
.shopt
pokazuje ją jako wyłączoną. Może jest to jakieś dziwne ustawienie serwera, które temu zapobiega, nie wiem. Mam obejście.bashrc
plik nie był domyślnie pozyskiwany.Powłoka, którą otrzymujesz, gdy zdalnie wykonujesz polecenie za pomocą SSH, nie jest ani powłoką interaktywną, ani powłoką logowania:
(w odpowiedzi nie ma
i
ani niel
)W przypadku Basha oznacza to, że nie są odczytywane żadne zwykłe pliki inicjujące.
Można wymusić zdalnej powłoki być powłokę logowania, dodając
-l
do wywołania bash, co oznacza, że będzie analizować pierwszy jeden~/.bash_profile
,~/.bash_login
i~/.profile
że można go znaleźć, szukając w tej kolejności, ale nie~/.bashrc
. Oznacza to, że zamiast tego będziesz musiał umieścić swoje aliasy w jednym z tych plików.źródło
Miałem ten sam problem i na początku
shopt -s expand_aliases
nie wydawałem się pomóc. Odkryłem, że te opcje należy ustawić przed dodaniem rzeczywistych aliasów. Więc jeśli aliasy są utworzone przed swoimi.bashrc
zestawami teexpand_aliases
opcje, nie będą one dostępne. Dlatego po ustawieniu opcji należy załadować (lub ponownie załadować) aliasy.źródło
bash (1) mówi
tak więc albo źródłowy plik .bashrc ręcznie, albo uruchomić go za pomocą -i
jeśli aliasy są wszystkim, czego potrzebujesz, zaleciłbym ich podzielenie na np. .aliases, a następnie źródło tego z .bashrc i skryptu, na wypadek, gdyby coś wkradło się do .bashrc, co może zepsuć skrypt, jak to często bywa
źródło
Możesz rozwiązać każdy problem, wprowadzając:
w pierwszej linii.
źródło