Problema con $ PATH e file eseguibile


8

Ho un file eseguibile unix situato in una directory che ho generato. Credo di aver bisogno di ottenere questa directory nella mia in $PATHmodo che l'eseguibile unix sia eseguibile, ma la documentazione per il codice sorgente dice che devo modificare il mio file di configurazione della shell per aggiungere $home/meme/binal percorso della mia shell.

Risposte:


10

Se si desidera poter eseguire un programma digitandone il nome sulla riga di comando, l'eseguibile del programma deve trovarsi in una delle directory elencate nella PATHvariabile di ambiente. Puoi vedere il valore corrente della variabile in questo modo ( $è il tuo prompt e il valore sotto è un esempio):

$ echo $PATH
/home/drbunsen/bin:/usr/local/bin:/usr/bin:/bin

Hai diverse scelte; mentre il n. 1 e il n. 2 riguardano concetti meno avanzati, raccomando il n. 3, che in pratica è meno lavoro:

  • Puoi mettere l'eseguibile in una directory che è già nella tua PATH. Ad esempio, se /home/drbunsen/binè già sul tuo PATH, puoi mettere l'eseguibile lì. Oppure puoi inserire l'eseguibile /usr/local/binse vuoi che sia disponibile per tutti gli utenti.
  • È possibile aggiungere la directory in cui si trova il file eseguibile PATH. Modifica il file ~/.profile( ~/significa che il file è nella tua home directory) (crea il file se non esiste). Aggiungi una linea come questa:

    PATH=$PATH:$HOME/meme/bin
    

    (Nota che non lo $HOMEè $home; in genere unix distingue tra maiuscole e minuscole. Puoi anche scrivere ~/meme/bin, ~è sinonimo di $HOMEquando si trova all'inizio del percorso di un file.) La modifica avrà effetto al successivo accesso. Puoi digitare questo stessa linea in un terminale, e influenzerà la shell in esecuzione in quel terminale e qualsiasi programma lanciato da esso.

  • L'approccio che raccomando è di mantenere l'eseguibile con gli altri file che fanno parte del programma, in una directory a sé stante, ma non di cambiare PATHneanche.
    Mantenere il file eseguibile $HOME/memeha il vantaggio che se si desidera rimuovere o aggiornare il programma, tutto è in un unico posto. Alcuni programmi lo richiedono anche per trovare i file che usano. Non cambiare PATHha il vantaggio che l'installazione e la disinstallazione dei programmi richiede meno lavoro.
    Per ottenere il meglio da entrambi i mondi, crea un collegamento simbolico in una directory sul tuo PATH, indicando l'eseguibile effettivo. Dalla riga di comando, esegui un comando come questo:

    cd ~/bin
    ln -s ../meme/bin/* .
    

    Supponendo che ~/binsia già sul tuo PATH; in caso contrario, aggiungilo ~/.profilecome indicato sopra. Scegli un'altra posizione, se lo desideri. Ora rendere disponibili i programmi è una questione di creazione di collegamenti simbolici; renderli non disponibili è una questione di rimuovere i collegamenti simbolici; e puoi facilmente tracciare quali programmi hai installato manualmente e dove vivono guardando i collegamenti simbolici.


Gilles, wow grazie mille per la spiegazione dettagliata. Apprezzo molto il vostro aiuto. Grazie per aver dedicato del tempo per rispondere alla mia domanda in dettaglio e ad un livello che ha reso tutto cristallino.
dr.bunsen,

Un'altra cosa che ho notato è che nella directory home / meme / non sembra esserci una directory / bin. Devo creare un cestino in modo da poter creare un collegamento simbolico qui al mio PATH? Grazie.
dr.bunsen,

@ dr.bunsen ~/binè un luogo comune e alcune distribuzioni lo creano automaticamente. In caso contrario, dovrai crearlo e aggiungerlo PATHmanualmente. La posizione ~/binè solo una convenzione, puoi scegliere un altro nome se lo desideri.
Gilles 'SO- smetti di essere malvagio' il

Il comando jolly non funziona perché ln interpreta l'ultimo elemento dell'espansione come una directory: "Uso: ln [OPTION] ... [-T] TARGET LINK_NAME (1 ° modulo) o: ln [OPTION] ... TARGET ( 2 ° modulo) o: ln [OPZIONE] ... TARGET ... DIRECTORY (3 ° modulo) o: ln [OPTION] ... -t TARGET DIRECTORY ... (4 ° modulo) "Per risolvere questo, ho aggiunto" - t ./ "
adam.r

1
@ adam.r Ho scritto ln -s ../meme/bin/* ., no ln -s ../meme/bin/*. Sembra che ti sia perso un personaggio durante la copia del comando.
Gilles 'SO- smetti di essere malvagio'
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.