2013-07-18 4 views
7

Я создал псевдоним в файле .bashrc:Баш скрипт не читает псевдоним в Bashrc

alias java='java -Xmx1200m' 

Этот псевдоним работает, когда я запускаю команду Java из моей оболочки непосредственно.

Однако, когда команда java находится внутри скрипта bash (script.sh), этот псевдоним не активируется. Как обеспечить, чтобы псевдонимы в файле .bashrc принимались в сценарии bash?

+1

дубликата http://stackoverflow.com/questions/2197461/how-to-set-an-alias-inside -a-bash-shell-script – suspectus

ответ

5

Псевдоним не расширяется в неинтерактивных оболочках.

Единственный способ сделать псевдоним - указать исходный скрипт с тем, который содержит псевдоним.

$ source .bashrc 
$ . custom_script.sh 
1

Псевдонимы ограничены оболочкой и не работают в исполняемых сценариях оболочки. Вам лучше создать переменную.

+0

Любое обходное решение ?? –

+0

Как насчет использования 'export java = 'java -Xmx1200m'' в' .bashrc'? – fedorqui

+0

, если скрипт оболочки выполняется вне входа пользователя i.e. Cron, он не может быть вызван - ему нужно указать .bashrc – Vahid

4

Цитируя 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).

говорят следующее в сценарии должны заставить его работать:

shopt -s expand_aliases 
+0

Не работает в FreeBSD/OSX как минимум. 'expand_aliases' уже включен по умолчанию. –

+2

@AinTohvri Вам нужно будет 'source $ HOME/.bashrc' в скрипте. – devnull

+0

Yup, после 'shopt -s expand_aliases', понял это. Работая сейчас, спасибо! –

0

Вы можете запустить скрипт под Баш Баш в интерактивном режиме; добавьте -i в командную строку bash, как этот скрипт. Теперь вы можете использовать свои псевдонимы.

#!/bin/bash -i 

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

lsd 
0

Самый простой ответ - сделать 2 важные вещи, или это не будет работать. В другом скрипте сделайте следующее: -i для интерактивного режима и часть магазина, как указано ниже.

#!/bin/bash -i 

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

После этого, ваши псевдонимы, которые вы определили в ~/.bashrc они будут доступны в сценарии оболочки (giga.sh или any.sh) и любой функции или детской оболочки в таком сценарии.

Если вы не сделаете этого, вы получите сообщение об ошибке:

your_cool_alias: command not found 
Смежные вопросы