LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 910|回复: 5

bash shell的问题

[复制链接]
发表于 2007-4-7 20:47:10 | 显示全部楼层 |阅读模式
我向在脚本中更改当前工作目录:
比如说:
#!/bin/bash
mkdir mydir
cd mydir
##############
我想在这个脚本中,新建一个文件夹,然后直接进入。
期望得到的结果是脚本运行结束时,当前的工作目录被转到mydir,但是这样作不行。
希望高手指点!!
发表于 2007-4-7 22:41:28 | 显示全部楼层
用alias
或是函数
回复 支持 反对

使用道具 举报

发表于 2007-4-7 23:04:43 | 显示全部楼层
运行的时候用
. 文件

source 文件
回复 支持 反对

使用道具 举报

发表于 2007-4-8 17:45:01 | 显示全部楼层
那当然不行了。因为你在运行这个脚本时shell会新建一个子shell来执行它。没错在子shell执行时是改变了目录但是当子shell运行完退出时当然它的一系列变量都over了。通俗的说是:儿子能继承父亲的相关特征,却不能影响或者说是改变父亲的特征。
你可以这样看看$type cd 结果应该是:cd is a shell builtin
正是因为它是个内部命令,所以才可以改变用户的环境。而外部命令是由shell的子进程执行的,子进程当然是不能改变父进程的环境的。这也就能证明为什么会有像cd,alias,source(.)之类的内部命令了。呵呵,不知道说明白咧没有,你可以查查《高级Bash脚本编程指南》http://www.linuxsir.cn/bbs/showthread.php?t=256887
回复 支持 反对

使用道具 举报

发表于 2007-4-8 18:05:51 | 显示全部楼层
[username@localhost shell]$ cat a.sh
#!/bin/bash
name=mydir
mkdir $name > /dev/null 2>&1
echo "cd $name"
[username@localhost shell]$ `./a.sh`
[username@localhost mydir]$
回复 支持 反对

使用道具 举报

发表于 2007-4-9 09:19:12 | 显示全部楼层
Post by adamzyg
那当然不行了。因为你在运行这个脚本时shell会新建一个子shell来执行它。没错在子shell执行时是改变了目录但是当子shell运行完退出时当然它的一系列变量都over了。通俗的说是:儿子能继承父亲的相关特征,却不能影响或者说是改变父亲的特征。
你可以这样看看$type cd 结果应该是:cd is a shell builtin
正是因为它是个内部命令,所以才可以改变用户的环境。而外部命令是由shell的子进程执行的,子进程当然是不能改变父进程的环境的。这也就能证明为什么会有像cd,alias,source(.)之类的内部命令了。呵呵,不知道说明白咧没有,你可以查查《高级Bash脚本编程指南》http://www.linuxsir.cn/bbs/showthread.php?t=256887

原来如此啊,终于明白了。thanks!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表