Почему sh / bash устанавливает значения параметров командной строки при попытке установить переменную окружения? - PullRequest
2 голосов
/ 26 мая 2010

Вопрос по основам: при настройке переменных среды для программы, запускаемой из скрипта, я столкнулся с несколько странным поведением с sh (которое, похоже, на самом деле связано с bash): установка переменных, похоже, путается с командной строкой параметры.

Может кто-нибудь объяснить, почему это происходит?

Простой скрипт:

#! /bin/sh

# Messes with $1 ??
set ANT_OPTS=-Xmx512M
export ANT_OPTS

# Works
# export ANT_OPTS=-Xmx512M

echo "0 = $0"
echo "1 = $1"

Когда я запускаю это с верхней альтернативой (set + export), результат будет следующим:

$ ./test.sh foo
0 = ./test.sh
1 = ANT_OPTS=-Xmx512M

Но с более низкой альтернативой (прямой экспорт) результат, как я и предполагал:

$ ./test.sh foo
0 = ./test.sh
1 = foo

Конечно, есть логичное объяснение, я просто еще не понял. Кто-нибудь, у кого есть идея?

br, Touko

Ответы [ 2 ]

4 голосов
/ 26 мая 2010

Вы должны просто использовать ANT_OPTS=-Xmx512M вместо set ANT_OPTS=-Xmx512M.

ОБНОВЛЕНИЕ: см. здесь для обсуждения set и руководства .

2 голосов
/ 26 мая 2010

«set» не является частью установки переменных в Bourne Shell. Это должно быть

ANT_OPTS=-Xmx512m
export ANT_OPTS 
...