遇到一个关于 Shell 的头痛问题

2 views
Skip to first unread message

BiFF

unread,
Jul 15, 2007, 10:42:39 AM7/15/07
to Ubuntu China

不用 . 或 source 还有没有别的办法修改当前环境变量??

当前环境变量里 a=kkkkkkkk,运行脚本 export a=sssssss ,在脚本运行过程中(fork)变量a是被改了,可是子进程结束
后,当前环境变显的a没有受到影响。

bash里有没有类似C的setenv函数?

$> echo $a
kkkkkkkk

--- test.sh---
#!/bin/bash
a=sssss
export a
echo $a

$> test.sh
sssss

$>echo $a
kkkkkkkkk

BiFF

unread,
Jul 16, 2007, 9:16:24 PM7/16/07
to Ubuntu China

各位试试,有解否?

sunny

unread,
Jul 16, 2007, 9:33:41 PM7/16/07
to ubun...@googlegroups.com
似乎无解。执行一个脚本就是启动了一个新的SHELL,在新的SHELL里改动的环境变量不会影响到父SHELL

ideas

unread,
Jul 16, 2007, 11:17:23 PM7/16/07
to ubun...@googlegroups.com
去掉shell第一行的
#!/bin/bash
试试看

 
在07-7-15,BiFF <sha...@gmail.com> 写道:

BiFF

unread,
Jul 16, 2007, 9:56:24 PM7/16/07
to Ubuntu China
C语言里的 getenv 和 setenv 没有在 bash 里实现?

唉。。。。看来只能用C写了,工作量增加N次方

:-(

On 7月17日, 上午9时33分, sunny <sunny.sz...@gmail.com> wrote:
> 似乎无解。执行一个脚本就是启动了一个新的SHELL,在新的SHELL里改动的环境变量不会影响到父SHELL

BiFF

unread,
Jul 17, 2007, 3:39:19 AM7/17/07
to Ubuntu China

高人啊!!

我怎么想了几天都没想到这一点呢。。。。。该死!!

BiFF

unread,
Jul 17, 2007, 4:11:12 AM7/17/07
to Ubuntu China
思路是对的,就是不能让 shell fork 出新进程,

但是试了以后发现效果还是一样的。

除非涉及到架构原理或安全问题,不然一定会有办法的。继续找。。。。

On 7月17日, 下午3时39分, BiFF <sha...@gmail.com> wrote:
> 高人啊!!
>
> 我怎么想了几天都没想到这一点呢。。。。。该死!!

BiFF

unread,
Jul 17, 2007, 4:38:58 AM7/17/07
to Ubuntu China

找到一个变通的办法,

先写一个脚本,内容是

----------test.sh ------------
read name
export MYNAME=$name

然后在 .bashrc 里定义

alias chgname="source test.sh"

Zeng....@gmail.com

unread,
Jul 18, 2007, 2:04:52 AM7/18/07
to Ubuntu China
跟setenv对应的不就是export?
你的这个要求用C同样不能实现。

BiFF

unread,
Jul 18, 2007, 3:01:21 AM7/18/07
to Ubuntu China
用 C 也是 fork 新进程,确实不行

以前没仔细想过,没想到看似这么简单的一个问题都能搞死人!!

ideas

unread,
Jul 25, 2007, 11:06:26 PM7/25/07
to ubun...@googlegroups.com
有解决办法了,这样运行shell脚本:. ./test.sh
两个点之间有个空格,这样就能改变当前shell中的环境变量!

 
在07-7-18,BiFF <sha...@gmail.com> 写道:
用 C 也是 fork 新进程,确实不行

以前没仔细想过,没想到看似这么简单的一个问题都能搞死人!!






--
>>> ideas here <<<

sunny

unread,
Jul 26, 2007, 4:36:41 AM7/26/07
to ubun...@googlegroups.com
不可能解决问题,这种调用方法只是告诉SHELL去哪里搜索可执行文件而已。

在 07-7-26,ideas<mr.i...@gmail.com> 写道:

BiFF

unread,
Jul 27, 2007, 6:30:30 AM7/27/07
to Ubuntu China
想想挺容易:用脚本改变当前 shell 的环境变量

http://www.pkblogs.com/binsos/2007/07/shell.html

Zeng....@gmail.com

unread,
Jul 28, 2007, 2:18:59 PM7/28/07
to Ubuntu China
其实你这还是使用了"."操作,可以说是换汤不换药,所以跟你原贴的要求还是不符合。

BiFF

unread,
Jul 30, 2007, 10:15:37 PM7/30/07
to Ubuntu China

在给别人调用的时候屏蔽了一下,

实在找不出更好的办法了。。。。。

Zeng....@gmail.com

unread,
Aug 1, 2007, 2:23:28 AM8/1/07
to Ubuntu China
因为这个除了.和source 就没有其他的办法了。

On Jul 30, 8:15 pm, BiFF <sha...@gmail.com> wrote:
> 在给别人调用的时候屏蔽了一下,
>
> 实在找不出更好的办法了。。。。。

fanlix

unread,
Aug 2, 2007, 11:54:02 AM8/2/07
to ubun...@googlegroups.com
hello BiFF:

其实你要的就是
read CSVNAME
这一个命令而已,何必如此周折。

倒是你让所有客户都用一个用户名登录系统这点可以考虑改进一下。

在07-8-1, Zeng....@gmail.com <Zeng....@gmail.com> 写道:

BiFF

unread,
Aug 2, 2007, 9:03:51 PM8/2/07
to Ubuntu China

On 8月2日, 下午11时54分, fanlix <fan...@gmail.com> wrote:
> hello BiFF:
>
> 其实你要的就是
> read CSVNAME
> 这一个命令而已,何必如此周折。

不解。读入一个变量是没有问题,现在的问题是如何通过 "直接" 运行一个脚本修改环境参数
我现在是用 alias editenv=`. editenv.sh` 来解决的


>
> 倒是你让所有客户都用一个用户名登录系统这点可以考虑改进一下。
>

因为是一个团队为银行做开发,这种情况下银行通常只会提供一个登录帐号
如果我有主动权,估计也不会用CVS,而是改用SVN了

而且这中间有个非常BT的决定:项目经理让所有开发人员在同一个服务器的一个源码目录下编辑开发--也就是同仓库、同工作目录,CVS的作用跟tar差
不了多少了,完全没有协同的意义了

Reply all
Reply to author
Forward
0 new messages