2013-07-18 18 views
7

ho creato un alias nel file .bashrc:script bash non leggere alias nel bashrc

alias java='java -Xmx1200m' 

Questo alias funziona quando si esegue un comando java dal mio guscio direttamente.

Tuttavia, quando il comando java si trova in uno script di bash (script.sh), questo alias non viene attivato. Come posso assicurarmi che gli alias nel file .bashrc siano accettati in uno script bash ??

+1

duplicato di http://stackoverflow.com/questions/2197461/how-to-set-an-alias-inside -a-bash-shell-script – suspectus

risposta

5

Gli alias non sono espansi in shell non interattive.

L'unico modo per creare un alias è di generare lo script di destinazione con quello che contiene l'alias.

$ source .bashrc 
$ . custom_script.sh 
1

Gli alias sono limitati alla shell e non funzionano negli script di shell eseguiti. Stai meglio creando una variabile.

+0

Qualsiasi soluzione alternativa ?? –

+0

Che dire dell'uso di export java = 'java -Xmx1200m' in '.bashrc'? – fedorqui

+0

se lo script della shell viene eseguito al di fuori dell'accesso utente, ad esempio cron, potrebbe non essere richiamato - ha bisogno di source .bashrc – Vahid

4

Citando dal bash manual:

Aliases are not expanded when the shell is not interactive, unless the expand_aliases shell option is set using shopt (see The Shopt Builtin).

Dire il seguente nello script dovrebbe farlo funzionare:

shopt -s expand_aliases 
+0

Non funziona almeno in FreeBSD/OSX. 'expand_aliases' è già attivo per impostazione predefinita. –

+2

@AinTohvri Dovresti 'trovare $ HOME/.bashrc' nello script. – devnull

+0

Sì, dopo "shopt -s expand_aliases', l'ho capito. Funzionando ora, grazie! –

0

È possibile eseguire lo script in bash bash in modalità interattiva; aggiungi -i alla riga di comando di bash, come questo script. Ora puoi usare i tuoi alias.

#!/bin/bash -i 

alias lsd='ls -al | grep ^d' 

lsd 
0

La risposta più semplice è fare le 2 cose importanti o non funzionerà. Nell'altro script, effettuare le seguenti operazioni: -i per la modalità interattiva e parte di shopt come indicato di seguito.

#!/bin/bash -i 

# Expand aliases defined in the shell ~/.bashrc 
shopt -s expand_aliases 

Dopo questo, gli alias che sono stati definiti in ~/.bashrc saranno disponibili nel vostro script di shell (giga.sh o any.sh) ed a qualsiasi shell funzione o un bambino all'interno di tale script.

Se non lo fate, si otterrà un errore:

your_cool_alias: command not found