Dlaczego ustawienie aliasu w .profile nie działa?


11

Mam to jako ostatni wiersz w moim .profile:

alias gl="cd /home/jrenner/glances/glances"

ale nawet po ponownym uruchomieniu pojawia się polecenie, że nie można znaleźć polecenia podczas wpisywania gl. Co się dzieje? Jestem zalogowany jako właściwy użytkownik.


Gdzie jesteś wpisując gl? Terminal? GUI?
Thomas Ward

1
Nikt nigdy nie zwracał się do oryginału, dlaczego? pytanie. Mogę potwierdzić, że zdefiniowane aliasy .profilenie działają w żadnym kontekście, w którym próbowałem: loginy konsoli tekstowej, terminale graficzne lub cokolwiek innego, nawet jeśli działają zmienne środowiskowe z tego samego pliku.
Daniel Mahler,

@DanielMahler, czy masz powód, dlaczego?
Maged Saeed,

Odpowiedzi:


4

Jestem pewien, że pomysł lpanebr zadziała, ale oto bardziej eleganckie rozwiązanie. Wykonaj to polecenie aliasu w .bashrc Tak właśnie to robię lub niektórzy wolą dodać plik poświęcony aliasowi. Zadzwoń .aliaslub cokolwiek i dodaj .aliasdo swojego.bashrc

Chciałbym móc formatować jak @lpanelbr. Zastanawiam się, czy istnieje wiki?


1
Jeśli chodzi o formatowanie, askubuntu używa markdown. Szczegółowe informacje można znaleźć na stronie askubuntu.com/editing-help .
saji89

1
Dlaczego .bashrcdziała, podczas gdy .profilenie? A także z jakiegokolwiek powodu, dla którego zdecydowałeś się nazwać plik aliasu .alliaszamiast .alias?
Tom

# 1 Z tego, co rozumiem, .bashrc jest specyficzny dla bash, a .profile jest specyficzny dla wiersza poleceń innego niż bash. # 2 Nie wiem o co ci chodzi. W końcu potrafię przeliterować. (edytowane)
Jason

7

Istnieją dwa powiązane powody, dla których aliasy nie zawsze działają po umieszczeniu w .profilepliku. Po pierwsze, plik .profile(lub .bash_profile) jest uruchamiany tylko dla powłoki logowania. Jeśli zaczynasz bash w oknie terminala pod X, twój emulator terminala (np. Gnome-termanl) prawdopodobnie nie uruchamia bash'a jako powłoki logowania. [Większość ma opcję, aby to zmienić, jeśli chcesz, ale domyślnie (w każdym razie gnome-termal) nie uruchamia go jako powłoki logowania.]
Powłoka będzie powłoką interaktywną i tak .bashrczostanie uruchomiona.

Jednak normalnie bash był uruchamiany jako powłoka logowania podczas uruchamiania sesji X. Jeśli więc są w nim komendy aliasowe .profile, zostaną one wykonane wraz z ustawieniem zmiennych środowiskowych, takich jak PATH itp. Po otwarciu okna terminala uruchamiana jest nowa instancja bash z prośbą o polecenie i wykonywanie poleceń w tym oknie terminala. W przeciwieństwie do zmiennych środowiskowych, aliasy nie mogą być eksportowane z jednego wystąpienia bash do nowego, uruchomionego przez niego. Dlatego aliasy nie są przekazywane do nowej powłoki.

Aby to zobaczyć, wypróbuj ten eksperyment:

export ROBERT=bob
alias james=jimmy
echo $ROBERT
alias james
bash               #start a new bash instance
echo $ROBERT
alias james
exit               #end the new bash instance and revert to the original one
echo $ROBERT
alias james

Zauważ, że .bashrcnie jest uruchamiany przez bash, gdy jest uruchamiany jako powłoka logowania. Tak więc umieszczenie aliasów nie zawsze będzie działać, chyba że .bashrcpochodzi od ciebie .profile, co jest bardzo powszechną praktyką.


Zweryfikowane: dodawanie source .bashrcw .bash_profiledozwolonym zestawie alias w .bashrc do pracy.
Treefish Zhang

Wygląda na to, że to powinna być poprawna odpowiedź. Ponadto w Ubuntu wystarczy dodać swoje aliasy ~/.bash_aliases. To jest właściwy sposób, aby to zrobić. (szczegółowe informacje można znaleźć w pliku .bashrc).
Emilio M.

0

Jeśli używasz bash ( echo $SHELL) jako interpretera powłoki, myślę, że najlepszym (a może jedynym sposobem) jest zdefiniowanie własnej funkcji CD.

Edytuj .bashrcplik i dodaj na końcu:

# my custom functions:
function gl () {
   cd /home/jrenner/glances/glances/
}

Możesz również rozszerzyć go w następujący sposób:

# my custom functions:
function cdw () {
   cd /home/jrenner/glances/glances/$1
   ls
}

i przejdź bezpośrednio do podkatalogu i wyświetl jego zawartość.


1
To może być dobra sugestia, ale nie jest to odpowiedź, ponieważ nie wyjaśnia, dlaczego aliasdyrektywa umieszczona w .profilepliku zawodzi.
Tom

0
$ bash #start a new bash instance

To był problem z moim serwerem. Prosty source .profilenie działał z jakiegoś powodu


0

Właściwym sposobem na to w Ubuntu jest dodanie swojego aliasu ~/.bash_aliases. Utwórz plik, jeśli nie istnieje.

Ten plik (jeśli jest obecny) jest wywoływany domyślnie ~/.bashrc, a alias będzie również dostępny w emulatorach terminali.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.