Domanda

Perché non i seguenti lavori?

$ alias sayHello='/bin/echo "Hello world!"'
$ sayHello 
    Hello world!
$ nohup sayHello
    nohup: appending output to `nohup.out'
    nohup: cannot run command `sayHello': No such file or directory

(il motivo che mi chiedo questa domanda è perché ho il mio alias perl e python a diversi binari Perl / Python che sono stati ottimizzati per i miei scopi, tuttavia, dà nohup mi preoccupa se non fornisco il mio percorso completo perl / python binari)

È stato utile?

Soluzione

Poiché la shell non passa alias a processi figli (eccetto quando si usa $ () o ``).

$ alias sayHello = '/ bin / echo "Ciao mondo!"'

Ora un alias è noto in questo processo di shell, che va bene, ma funziona solo in questo processo una conchiglia.

$ sayHello 

Hello world!

Dal momento che lei ha detto "sayHello" nella stessa shell ha funzionato.

$ nohup sayHello

Qui, un programma "nohup" viene avviato come un processo figlio. Pertanto, non riceverà gli alias. Poi si avvia il processo figlio "sayHello." - che non si trova

Per il vostro problema specifico, è meglio per rendere il nuovo "perl" e l'aspetto "python" come quelli normali come più possibile. Io suggerirei di impostare il percorso di ricerca.

Nel vostro ~ / .bash_profile aggiungere: export PATH = "/ my / lucido / interpreti / bin: $ {PATH}"

Poi nuovo login.

Poiché si tratta di una variabile d'ambiente, è si essere trasmessa a tutti i processi figli, siano essi conchiglie o no -. Ora dovrebbe funzionare molto spesso

Altri suggerimenti

Per bash: Prova a fare nohup 'your_alias'. Per me funziona. Non so il motivo per cui citando non viene mostrato. Metti il ??tuo alias tra virgolette schiena.

Con bash, è possibile richiamare una subshell in modo interattivo utilizzando l'opzione -i. Questo sarà il sourcing del .bashrc così come abilitare l'opzione di shell expand_aliases. Certo, questo sarà solo il lavoro se il alias è definito nel vostro .bashrc, che è la convenzione.

Bash manpage:

Se l'opzione -i è presente, il guscio è interattivo .

expand_aliases : Se impostato, alias vengono espansi come descritto sopra sotto alias. Questa opzione è abilitato di default per le shell interattive.

Quando si avvia una shell interattiva che non è una shell di login, bash legge e comandi Esegue da /etc/bash.bashrc e ~/.bashrc, se esistono questi file.


$ nohup bash -ci 'sayHello'

Se si guarda alla href="http://www.gnu.org/software/bash/manual/html_node/Aliases.html" rel="nofollow"> Alias ??sezione della Bash manuale, si dice

La prima parola di ogni comando semplice, se non quotata, viene controllato per verificare se ha un alias.

Purtroppo, non sembra come bash ha nulla di simile zsh di alias globali , che sono espanse in qualsiasi posizione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top