2013-08-23 10 views
22

Sto utilizzando Arch Linux appena installato. Quando accedo ad un utente (eseguendo bash) e provo ad usare un alias da .bashrc, mi dà l'errore 'comando non trovato'. Ma, se rientro in bash tramite il comando 'bash', il comando funziona bene.bashrc non si carica fino all'esecuzione del comando bash

Sì, sono già in bash.

ENV inizialmente:

SHELL=/usr/bin/bash 

env dopo l'esecuzione di bash, rimane:

SHELL=/usr/bin/bash 

così io non sono abbastanza sicuro dove sia il problema.

+0

Quale alias si usa? – lulyon

+0

Beh, in realtà è una funzione: function cl() {cd $ @; ls} –

+0

Possibile duplicato: http://stackoverflow.com/a/415444/208997 – Simon

risposta

41

Leggere la sezione INVOCAZIONE da "bash (1)" per i dettagli completi (questa è la pagina man di bash; utilizzare man bash). La prima shell al momento del login è una "shell di login", il che significa che il file .bashrc non è di provenienza. La seconda chiamata crea una shell interattiva, in cui viene importato .bashrc.

Se si vuole sempre il contenuto del file .bashrc elaborato, è possibile aggiungere le seguenti righe al file .bash_profile, creando quel file se non esiste già:

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

Per la sua pagina man, bash "[...] cerca ~/.bash_profile, ~/.bash_login e ~/.profile, in questo ordine e legge ed esegue i comandi dal primo esistente ed è leggibile." Le convenzioni e le politiche del tuo sistema locale determineranno quali, se esistono, di questi file esistono già.

Una parola di cautela: essere consapevoli del fatto che la creazione di un nuovo .bash_profile nella home directory potrebbe avere l'involontario effetto collaterale di impedire la lettura e l'esecuzione di comandi in un file .bash_login o .profile già presenti, cambiando ulteriormente il comportamento della successiva login.

+4

E creare il file '~/.bash_login' se non è ancora qui –

+2

o usare '~/.profile' per qualsiasi shell di login compatibile con Bourne. (bash) – Qwerty

+1

@Qwerty: se si mantiene l'ambiente in modo che ~/.bash_profile e ~/.bash_login non esistano, usare ~/.profile funziona. Da una pagina man di bash versione 4.2: "Quando bash viene invocato come shell di login interattiva, o come shell non interattiva con l'opzione --login, prima legge e esegue i comandi dal file/etc/profile, se quel file Esiste. Dopo aver letto quel file, cerca ~/.bash_profile, ~/.bash_login e ~/.profile, in quell'ordine, e legge ed esegue i comandi dal primo esistente ed è leggibile. " – sjnarv

5

Hai guardato i tuoi file ~/.profile, ~/.bash_login e ~/.bash_profile?

+2

Sono inesistenti a questo punto –

+2

Grazie, del tutto dimenticato. Non è abituato a dover configurare cose grazie a Ubuntu. –

Problemi correlati