Bash, controlla sempre $ PWD come parte del percorso?


15

Background: uno dei miei colleghi che non proviene da un background Linux mi ha chiesto di usare ./prima alcuni comandi e non altri, quindi gli ho spiegato come PATHfunzionano e come i binari sono scelti per essere eseguiti. La sua risposta fu che era stupido e voleva solo non aver bisogno di digitare ./prima dei comandi.

Domanda: esiste un modo per modificare facilmente il comportamento della shell in modo che $PWDsia sempre il primo elemento attivo PATH?


Può essere stupido, o no, ma ogni ambiente ha le sue stranezze, e questa è una tipica stranezza della shell Unix.
Ron John

12
È una misura di sicurezza. Conchiglie utilizzati per fare questo di default (si pensi 1970), e sistemi multi-utente sono state ampiamente attaccati a causa di esso.
Charles Duffy,

3
La sua risposta è stata che era stupido : il collega ha bisogno di educare se stesso su questo argomento. Quella risposta fuori dal comune dimostra una risposta in stile PHB : nessuna comprensione o apprezzamento del sistema sottostante.
Cloud

2
Perché non semplicemente rilasciare i binari ~/bine farne parte PATH? Questo mantiene anche le cose organizzate.
Sergiy Kolodyazhnyy,

3
@Ziazis su Windows, la directory corrente è considerata indipendentemente dal fatto che faccia parte di PATH(che è la solita fonte di tali considerazioni).
Stephen Kitt,

Risposte:


55

Se vuoi davvero, puoi farlo anteponendo . tuo percorso:

export PATH=".:$PATH"

Tuttavia, questa è una cattiva idea, perché significa che la tua shell sceglierà qualsiasi comando nella directory corrente rispetto ad altri. Se qualcuno (o qualche programma) rilascia un lscomando dannoso in una directory che usi frequentemente, sei nei guai ...


13
Questo è un punto eccellente, anche se forse sarebbe sufficiente spostare il. alla fine del percorso, quindi esporta PATH = "$ PATH :."
Christophe,

12
In effetti ricordo di avere .all'inizio il tuo PATHpredefinito per gli utenti normali (se ho creato l'utente con "sam" su HP-UX, almeno; non sono sicuro del vecchio SunOS). Successivamente questa impostazione predefinita è stata rimossa per motivi di sicurezza. Se hai il .tuo ultimo oggetto PATH, qualcuno può sperare in errori tipografici tipici.
Philippos,

6
@Philippos, sì, come i famigerati /tmp/slscript di scherzo per indirizzare gli utenti con tali PERCORSI. Su Debian e derivati, installa il slpacchetto per avere un'idea della frequenza con cui scrivi slal posto di ls.
Stéphane Chazelas,

No, non è una cattiva idea, è una buona idea, soprattutto se sei uno sviluppatore. Ovviamente, mantenere un ambiente in cui nessuno si immette in comandi dannosi è un'altra buona idea.
jamesqf,

4
@jamesqf, in realtà, è una buona idea digitare ./quando si desidera chiamare i comandi nella directory corrente. Oppure, se la directory corrente abituale è /project/under/development/bin, quindi aggiungere che al tuo PATH. Questo risolve il caso d'uso del tuo sviluppatore. Mettere .all'inizio del tuo PATHè una cattiva idea, punto.
Wildcard il

14

Sebbene questa non sia una risposta diretta alla tua domanda, la migliore pratica sarebbe quella di creare una bindirectory nella tua home directory come /home/user/bin:

mkdir -p "$HOME/bin"
echo 'PATH="$HOME/bin:$PATH"' >> "$HOME/.bashrc"
source "$HOME/.bashrc"

Fai inserire i tuoi script personali. Verrà PATHattraversato nell'ordine in cui lo definisci ed esegui i tuoi script personali senza il .necessario.


0

Devi avere il. all'inizio della variabile PATH:

export PATH=".:$PATH"
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.