2013-07-18 2 views
7

Ich habe einen Alias ​​in der Datei .bashrc erstellt:Bash-Skript nicht Alias ​​in bashrc Lesen

alias java='java -Xmx1200m' 

Dieser Alias ​​funktioniert, wenn ich direkt ein Java-Befehl von meiner Shell ausgeführt.

Wenn der Befehl java jedoch in einem Bash-Skript (script.sh) enthalten ist, wird dieser Alias ​​nicht aktiviert. Wie stelle ich sicher, dass die Aliase in der .bashrc-Datei in einem Bash-Skript akzeptiert werden?

+1

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

Antwort

5

Alias ​​wird in nicht interaktiven Shells nicht erweitert.

Die einzige Möglichkeit, einen Alias ​​zu erstellen, besteht darin, das Zielskript mit demjenigen zu versehen, der den Alias ​​enthält.

$ source .bashrc 
$ . custom_script.sh 
1

Aliase sind auf die Shell beschränkt und funktionieren nicht in ausgeführten Shell-Skripten. Sie sind besser dran, eine Variable zu erstellen.

+0

Irgendwelche Abhilfe? –

+0

Wie wäre es mit 'export java = 'java -Xmx1200m'' in' .bashrc'? – fedorqui

+0

Wenn das Shell-Skript außerhalb der Benutzeranmeldung ausgeführt wird, also cron, kann es nicht aufgerufen werden - er muss .bashrc – Vahid

4

Zitiert aus dem 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).

sagen das in Ihrem Skript folgende sollte es funktioniert:

shopt -s expand_aliases 
+0

Funktioniert nicht unter FreeBSD/OSX. 'expand_aliases' ist standardmäßig bereits aktiviert. –

+2

@AinTohvri Sie müssten $ HOME/.bashrc 'im Skript angeben. – devnull

+0

Yup, nachdem die 'shopts-expand_aliases' das erkannt haben. Jetzt arbeiten, danke! –

0

Sie können Ihr Skript unter bash bash im interaktiven Modus ausgeführt; Fügen Sie -i zur Bash-Befehlszeile wie dieses Skript hinzu. Jetzt können Sie Ihre Aliase verwenden.

#!/bin/bash -i 

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

lsd 
0

Die einfachste Antwort ist, die 2 wichtigen Dinge zu tun, oder es wird nicht funktionieren. Führen Sie in Ihrem anderen Skript Folgendes aus: -i für den interaktiven Modus und den Shopteil wie unten beschrieben.

#!/bin/bash -i 

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

Danach wird Ihre Aliase, die Sie in ~/definiert haben Bashrc sie in der Shell-Skript (giga.sh oder any.sh) und auf jede Funktion oder Kind Shell innerhalb eines solchen Skript zur Verfügung stehen wird.

Wenn Sie das nicht tun, werden Sie eine Fehlermeldung erhalten:

your_cool_alias: command not found