Come posso trovare una dichiarazione alias canaglia?


37

Sto cercando di trovare dove aliasè stato dichiarato uno specifico . Ho cercato tutti i soliti posti che conosco per cercare alias:

  • ~ / .Bashrc
  • ~ / .Bash_profile
  • / Etc / bashrc
  • / Etc / profile

Senza fortuna.

So che è un aliasperché quando lo faccio which COMMAND, ottengo:

alias COMMAND='/path/to/command'
    /path/to/command

C'è un modo per trovare quale file dichiara di aliasconoscere solo il aliasnome?


3
Una domanda correlata sulle variabili di ambiente anziché sugli alias. Fondamentalmente, non esiste un modo semplice poiché l'alias avrebbe potuto essere impostato ovunque. Prova a mettere set -xcome suggerito nella parte superiore del tuo e vedere se questo si restringe per te.
jw013,

1
Dovresti mettere set -xin cima a /etc/bash_profileo /etc/bashrc. Perché non correre bash -i -xo bash -l -x?
Mikel,

Risposte:


30

Vorrei cercare /etc/profile.d/l'infrazione alias.

Puoi anche fare quanto segue per trovarlo:

grep -r '^alias COMMAND' /etc

Questo ricorsivamente grepattraverso i file che cercano una linea che inizia con alias COMMAND.

Se tutto il resto fallisce, mettilo alla fine del tuo ~/.bashrc

unalias COMMAND

26

Ci sono alcune cose che puoi provare:

  1. usare bash -vper vedere quali righe vengono lette durante l'avvio della shell
  2. usare bash -xper vedere quali comandi vengono eseguiti durante l'avvio della shell
  3. eseguito con un solo file di avvio

bash -v

L' -v opzione fa bashstampare ogni riga da ogni file di script che legge mentre la legge.

Inizia correndo

bash -i -v >bash-i.out 2>&1

attendere 5-10 secondi, quindi premere Ctrl+C.

Questo ti darà un singolo file chiamato bash-i.outche è come tutti i file di avvio uniti (o concatenati) insieme.

Quindi utilizzare lessper aprire il file e cercare l'alias usando /aliasname.

Ora confronta dove appare quell'alias in relazione ad altre righe nel file. Ad esempio, sulla maggior parte dei sistemi, /etc/bash.bashrcha un commento in alto che dice /etc/bash.bashrce ne ~/.bashrcha anche uno.

Se è sopra la parte superiore del tuo ~/.bashrc, probabilmente è un file di avvio /etcche sta definendo l'alias, altrimenti è nel tuo ~/.bashrco in un file che include tramite sourceo .(comando punto).

Se ciò non mostra l'alias, prova

bash -l -v >bash-l.out 2>&1

Ciò dice a bash di essere una shell di login, che legge alcuni file di avvio diversi, ad esempio /etc/profilee ~/.bash_profileinvece di /etc/bash.bashrce ~/.bashrc.

bash -x

Se bash -vnon ti dà una risposta definitiva, prova a eseguire bash -x, che stampa i comandi che sta eseguendo la shell, piuttosto che le linee che la tua shell sta leggendo.

Il metodo è sostanzialmente lo stesso del precedente tranne che per cambiare -vin -x. (Puoi usarli entrambi insieme se necessario.)

Esegui con un solo file di avvio

bash -i --rcfile="$HOME/.bashrc"

e vedi se hai l'alias.

Prova lo stesso con rcfileset su /etc/bash.bashrcse il tuo sistema lo ha.

Quindi prova

bash -l --rcfile="$HOME/.bash_profile"

e fare lo stesso con ogni file di avvio di bash che ha il profilesuo nome, ad esempio passare $HOME/.bash_profilea /etc/profile.

Qualunque modo faccia apparire l'alias ti dice il file che dovresti iniziare a guardare.


2

Forse il tuo .xinitrc? Dovresti anche verificare se il tuo .bashrco il tuo .bash_profilesorgente contiene altri file. Ad esempio, tengo tutti i miei alias in un file separato a cui fa riferimento questo comando:

[ -f ~/.bash_alias ] && source $HOME/.bash_alias

Alcune domande che potrebbero anche aiutare: è per un utente normale o root? Di che comando si tratta? Che sapore di Linux?


0

Seguo la pratica molto comune di inserire le mie definizioni alias

~/.bash_aliases

e poi chiamandolo da .bashrc con

[ -f ~/.bash_aliases ] && source $HOME/.bash_aliases

posso immaginare che intendi .bash_aliases nel tuo secondo comando invece di .bash_alias?
stagl
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.