Aggiungi al percorso solo sh file non una dir

Ho una cartella bin con un sacco di file sh. Ad esempio “server-run.sh”, “server-stop.sh”, “server-do-something.sh”. E voglio eseguire il file “server-stop.sh” da qualsiasi luogo. Potrei aggiungere questa cartella bin al path ma anche i file “run” e “do-something” saranno disponibili e non voglio inquinare la mia console. Inoltre, non voglio aggiungere questo file alla cartella / bin, perché potrebbe cambiare. Forse il link. Posso in qualche modo aggiungere solo “server-stop.sh” al percorso?

Il modo migliore è aggiungere un collegamento simbolico a questo file nella /usr/local/bin :

 cd /usr/local/bin ln -s server-stop.sh /path/to/your/folder/server-stop.sh 

In questo caso, si sta aggiungendo un collegamento al file originale, quindi è sempre ansible modificare il file originale e il comando sarà sempre funzionante.

La creazione di collegamenti in /usr/bin funziona, ma a meno che tu non voglia che gli script siano disponibili per tutti gli utenti, preferirei creare i collegamenti in ~/bin , con lo stesso risultato, ma senza toccare il sistema globale. Inoltre, OP non ha menzionato dove sono memorizzati gli script. creare un collegamento globalmente mentre gli script sono memorizzati localmente è una ctriggers pratica, quindi tutto sumto suggerirei:

  • Crea una directory locale ~/bin .
  • Rimuovi l’estensione della lingua dagli script (a meno che non si richiamino a vicenda), rendili eseguibili (vedi sotto).
  • Crea collegamenti agli script da ~/bin (ln -sf).
  • Esci e torna indietro.

Con o senza estensione del linguaggio, lo script funzionerebbe perfettamente. Tuttavia, ci sono alcuni argomenti per utilizzare lo script senza estensione del linguaggio:

  • Per ragioni di chiarezza, potrebbe essere preferibile denominare il collegamento allo script simile allo script stesso . mantenere l’estensione della lingua sarebbe quindi meno conveniente quando si richiama lo script.
  • Sebbene un po ‘esagerato nel caso di script scritti dall’utente, secondo le convenzioni di lintian , gli script (oi collegamenti agli script) nei percorsi di ricerca predefiniti non dovrebbero avere un’estensione di lingua. –

Vorrei usare l’ hash comando built-in bash per ricordare la posizione dello script server-stop.sh :

 hash -p /path/to/folder/server-stop.sh server-stop 

Basta aggiungere la riga sopra al tuo file .bashrc . Ora puoi usare server-stop ovunque nella tua shell / script bash .

Vedi help hash :

 hash: hash [-lr] [-p pathname] [-dt] [name ...] Remember or display program locations. Determine and remember the full pathname of each command NAME. If no arguments are given, information about remembered commands is displayed. Options: -d forget the remembered location of each NAME -l display in a format that may be reused as input -p pathname use PATHNAME is the full pathname of NAME -r forget all remembered locations -t print the remembered location of each NAME, preceding each location with the corresponding NAME if multiple NAMEs are given Arguments: NAME Each NAME is searched for in $PATH and added to the list of remembered commands. 

Forse un alias è ciò che stai cercando. Apri il tuo file ~/.bash_aliases e aggiungi quanto segue alla fine del file (il file potrebbe essere vuoto a seconda che tu abbia precedentemente aggiunto un alias):

 alias server-stop.sh='/path/to/your/server-stop.sh` 

Professionisti:

  • Questo aggiungerà solo server-stop.sh come tu intendi

  • Questo non cambierà la tua variabile $PATH

  • Gli altri utenti del tuo sistema non sono interessati

Contro:

  • Dovrai cambiare l’alias una volta cambiato il percorso dove si trova server-stop.sh (non penso che sarà richiesto molto frequentemente)

  • Funzionerà solo per bash shell, dovrai vedere quali altre shell usare per l’alias.