我无法通过可执行env
脚本设置csh/tcsh
变量
env
可执行脚本中的csh/tcsh
变量" myscript"
脚本的内容......
setenv MYVAR /abc/xyz
无法在shell上设置并报告"未定义变量"
我已通过以下shell命令使csh/tcsh
脚本成为可执行文件
chmod +x /home/xx/bin/myscript
路径也更新为
set path = (/home/xx/bin $path)
which myscript
/home/xx/bin/myscript
当我在命令行上运行脚本并回显env变量..
myscript
echo $MYVAR
MYVAR "Undefined variable"
但如果我在命令行上来源
source /home/xx/bin/myscript
echo $MYVAR
/abc/xyz
答案 0 :(得分:3)
您需要source
您的代码而不是执行它,以便由您想要修改环境的当前shell进行评估。
你当然可以嵌入
source /home/xx/bin/myscript
在.cshrc
脚本不需要是可执行的,也不需要#!
shebang(尽管它们不会受到伤害)
答案 1 :(得分:1)
这不是环境变量的工作方式。
为进程设置环境变量(在本例中为tcsh
),该变量将传递给所有子进程。所以当你这样做时:
$ setenv LS_COLORS=foo
$ ls
您首先为LS_COLORS
流程tcsh
设置tcsh
,然后启动ls
环境中的子流程tcsh
(包括LS_COLORS
),然后可以使用它。
但是,您正在做的是将环境设置为子进程,然后将其传播回父进程(以某种方式)。这是不可能的。这与tcsh
无关,它对系统上的任何进程都是这样的。
它与source
一起使用,因为source
读取文件,并在当前进程中逐行执行 。因此,它不会启动新的tcsh
流程。
我会把它作为练习留给你,如果它 可能意味着什么意思:-)你真的想处理设置一些随机环境变量的不明智的shell脚本吗?那么php
进程设置的环境变量呢,我们是否希望这些变量返回到父httpd
进程? : - )
您并没有真正描述您尝试实现的目标,但总的来说,您希望执行以下操作:
#!/bin/csh -f
# ... Do stuff ...
echo "Please copy this line to your environment:"
echo "setenv MYVAR $myvar"