Esegui uno script da qualsiasi luogo


8

Ho una sceneggiatura:

#!/bin/bash
echo "$(dirname $(readlink -e $1))/$(basename $1)"

che si trova qui: /home/myuser/bin/abspath.shche ha i permessi di esecuzione.

Se corro echo $PATHottengo il seguente:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/myuser/bin

Vorrei poter chiamare, da qualsiasi directory, abspath <some_path_here>e questo chiama il mio script. Sto usando bash, cosa sto facendo di sbagliato?

Risposte:


30

Si desidera digitare abspath, ma il programma è denominato abspath.sh. Il problema non riguarda il fatto che si trovi nel PERCORSO, ma il fatto che semplicemente non stai usando il suo nome per chiamarlo.

Hai due opzioni:

  1. Digita abspath.shinvece.
  2. Rinominare il programma in abspath.

1
... O creare un simlink: cd $HOME/bin ; ln -s abspath.sh abspath. Ciò ti consente di mantenere l'estensione corretta per lo script e di avere uno strumento chiamato come preferisci. (In alcuni casi potresti sostituire il tuo script shell con uno script Python, per esempio ...)
F. Hauri,

O crea un alias.
Jenny D,

6

Questo codice è abbastanza piccolo da codificarlo come una funzione shell:

abspath() {
    echo "$(dirname "$(readlink -e "$1")")/$(basename "$1")" 
} 

E sì, vuoi tutte quelle citazioni.


4

imposta un alias aggiungendo il tuo comando nel file .bashrc.

alias abspath='sh /home/myuser/bin/abspath.sh'

E non dimenticare di creare il file.


1
Perché vorresti sudo qui?
un CVn

1
Vorrei votare in basso se avessi abbastanza reputazione perché usare sudo inutilmente è semplicemente sbagliato. Sembra che alcune persone usino automaticamente sudo per tutto invece di imparare quando e perché è necessario.
Scott Severance,

D'accordo con voi ragazzi. E so quando usare sudo. Non ho visto tutte le domande.
Balasekhar Nelli,

2

Rinominerei il tuo script bash per abspathspostarlo nella bindirectory. Sarai in grado di chiamare abspathda qualsiasi luogo allora


0

Una terza opzione è quella di creare un alias chiamato abspath che punta allo script abspath.sh.


5
Non necessario se risolto come spiega la soluzione accettata, anche piuttosto contorto e nasconde effettivamente un problema piuttosto che risolverlo.
dawud,

Non vale la pena discutere, ma è ovvio che se lo risolvi con una soluzione, non è necessario applicare un'altra soluzione. Sì, questa è una soluzione bandaid e fare riferimento direttamente allo script della shell è una soluzione più ideale.
Tokamak,
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.