通过命令行选项覆盖用户定义的 variable/environment 变量
Overriding an user defined variable/environment variable through command line option
正在寻找从命令行覆盖 c-shell 变量的方法。在下面的脚本 (test.csh) 中,FOO 的默认值将为 0。我应该 "optionally" 能够从命令行覆盖 FOO 的值。
#!/bin/csh
setenv FOO 0
if (${FOO}) then
echo "Hello"
else
echo "World"
endif
查看 csh/tcsh 的手册页表明有一个 -Dvariable[=value] 可以做到这一点。所以我在命令行上尝试了下面的命令,并认为它会打印 "Hello"。相反,它打印了 "World" - 这意味着 -DFOO=1 没有生效。
unix-prompt> ./test.csh -DFOO=1
我不想使用#argv 东西,然后解析 args 并根据 args 适当地设置环境变量。我没有强制使用 setenv。
期望使用命令行覆盖来覆盖 c-shell 中使用的默认值。
-D
选项在 tcsh(1)
中记录为:
-Dname[=value]
Sets the environment variable name to value. (Domain/OS only) (+)
我猜你不是 运行 Domain/OS :-)
您可以使用env
为一个命令设置一个变量,例如:
$ env FOO=1 ./a.csh
请注意,在您的脚本中,您总是将 FOO
覆盖为 0
;所以你需要修改它以在它未设置时覆盖它:
if (! $?FOO) setenv FOO 0
作为后记,我应该指出,如果可以避免的话,通常不鼓励在 csh 中编写脚本;有很多注意事项和缺点(参见 this),使用 Bourne shell.
几乎总是更好
正在寻找从命令行覆盖 c-shell 变量的方法。在下面的脚本 (test.csh) 中,FOO 的默认值将为 0。我应该 "optionally" 能够从命令行覆盖 FOO 的值。
#!/bin/csh
setenv FOO 0
if (${FOO}) then
echo "Hello"
else
echo "World"
endif
查看 csh/tcsh 的手册页表明有一个 -Dvariable[=value] 可以做到这一点。所以我在命令行上尝试了下面的命令,并认为它会打印 "Hello"。相反,它打印了 "World" - 这意味着 -DFOO=1 没有生效。
unix-prompt> ./test.csh -DFOO=1
我不想使用#argv 东西,然后解析 args 并根据 args 适当地设置环境变量。我没有强制使用 setenv。
期望使用命令行覆盖来覆盖 c-shell 中使用的默认值。
-D
选项在 tcsh(1)
中记录为:
-Dname[=value]
Sets the environment variable name to value. (Domain/OS only) (+)
我猜你不是 运行 Domain/OS :-)
您可以使用env
为一个命令设置一个变量,例如:
$ env FOO=1 ./a.csh
请注意,在您的脚本中,您总是将 FOO
覆盖为 0
;所以你需要修改它以在它未设置时覆盖它:
if (! $?FOO) setenv FOO 0
作为后记,我应该指出,如果可以避免的话,通常不鼓励在 csh 中编写脚本;有很多注意事项和缺点(参见 this),使用 Bourne shell.
几乎总是更好