cd命令结果不如预期.... 求解释

sh/bash/dash/ksh/zsh等Shell脚本
回复
riptide2012
帖子: 222
注册时间: 2011-12-14 10:21

cd命令结果不如预期.... 求解释

#1

帖子 riptide2012 » 2012-03-29 16:43

这是我的脚本

代码: 全选

#!/bin/bash

script_path="/tmp/__flexcmd.sh"

echo "#! /bin/bash" > "$script_path"
echo "# generated by script" >> "$script_path"
echo $1 | tr  '%' '$' >> "$script_path"
shift 1
source $script_path $@
然后运行

./flexcmd.sh "mkdir -p %1 && cd %1 " aaa

目录有建立,但是没有改变当前目录

然后运行

source /tmp/__flexcmd.sh aaa

是正常的
riptide2012
帖子: 222
注册时间: 2011-12-14 10:21

Re: cd命令结果不如预期.... 求解释

#2

帖子 riptide2012 » 2012-03-29 16:56

又试了下,这样执行是正确的 :em20

代码: 全选

. /home/xxxx/flexcmd.sh " mkdir -p %1 &&  cd %1 "  aaa
这之间有有什么差?
头像
枫叶饭团
帖子: 14683
注册时间: 2010-06-16 1:05
系统: Mac OS X
来自: Tencent
联系:

Re: cd命令结果不如预期.... 求解释

#3

帖子 枫叶饭团 » 2012-03-29 16:56

把./的/去掉再试试
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: cd命令结果不如预期.... 求解释

#4

帖子 lilydjwg » 2012-03-29 17:06

cd命令结果如我预期,完毕。
建议先看 shell 基础。不对,是进程的基础知识。
riptide2012
帖子: 222
注册时间: 2011-12-14 10:21

Re: cd命令结果不如预期.... 求解释

#5

帖子 riptide2012 » 2012-03-29 17:24

lilydjwg 写了:cd命令结果如我预期,完毕。
建议先看 shell 基础。不对,是进程的基础知识。
你的意思是

执行的脚本是一个独立的进程,所以cd的效果terminal里看不到。

. 或则 source 是把脚本读到当前的环境,所以才有效的。
头像
枫叶饭团
帖子: 14683
注册时间: 2010-06-16 1:05
系统: Mac OS X
来自: Tencent
联系:

Re: cd命令结果不如预期.... 求解释

#6

帖子 枫叶饭团 » 2012-03-29 17:38

riptide2012 写了:
lilydjwg 写了:cd命令结果如我预期,完毕。
建议先看 shell 基础。不对,是进程的基础知识。
你的意思是

执行的脚本是一个独立的进程,所以cd的效果terminal里看不到。

. 或则 source 是把脚本读到当前的环境,所以才有效的。
./会开启子shell
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: cd命令结果不如预期.... 求解释

#7

帖子 lilydjwg » 2012-03-29 18:00

riptide2012 写了:
lilydjwg 写了:cd命令结果如我预期,完毕。
建议先看 shell 基础。不对,是进程的基础知识。
你的意思是

执行的脚本是一个独立的进程,所以cd的效果terminal里看不到。

. 或则 source 是把脚本读到当前的环境,所以才有效的。
差不多。

准确地说,是父进程(和你说话的那个 bash)看不到。. 基本上就是省去了你手动把那些代码在命令行上打一遍的过程。
回复