Why does sh/bash set command line parameter values when trying to set environment variable?
Solution 1
You should just use ANT_OPTS=-Xmx512M
instead of set ANT_OPTS=-Xmx512M
.
UPDATE: See here for discussion of set
, and the manual.
Solution 2
"set" isn't part of setting variables in Bourne Shell. That should be
ANT_OPTS=-Xmx512m
export ANT_OPTS
Apollon
Updated on June 05, 2022Comments
-
Apollon almost 2 years
A question on basics : While tuning environment variables for a program launched from a script, I ended up with somewhat strange behaviour with sh (which seems to be actually linked to bash) : variable setting seems to mess up with command-line parameters.
Could somebody explain why does this happen?
A simple script:
#! /bin/sh # Messes with $1 ?? set ANT_OPTS=-Xmx512M export ANT_OPTS # Works # export ANT_OPTS=-Xmx512M echo "0 = $0" echo "1 = $1"
When I run this with the upper alternative (set + export), the result is as following:
$ ./test.sh foo 0 = ./test.sh 1 = ANT_OPTS=-Xmx512M
But with lower alternative (export straight), the result is as I supposed:
$ ./test.sh foo 0 = ./test.sh 1 = foo
There is surely logical explanation, I just haven't figured it out yet. Somebody who does have idea?
br, Touko
-
Apollon almost 14 yearsOK, that also solves the behavior that I didn't expect. Thanks!
-
Hank Gay almost 14 years1. As @Paul Tomblin mentions in a comment, if you're using
#!/bin/sh
you should restrict yourself to just Bourne Shell, butbash
is what you're going to get from/bin/sh
on pretty much every single Linux distro, so if you get bugs it might be because you used abash
-ism by accident. 2. If you're coming tobash
fromcsh
or similar, you should probably find a good book and dig in; it seems likebash
was designed to confuse people who already knowcsh
(and vice versa).