日期:2014-05-16  浏览次数:21176 次

linux下执行sh -c cd /home 没有效果
我在linux下执行sh -c cd /home 执行后没效果,
如果执行sh -c cd /home|ls 看到的还是当前目录下的ls后的效果
sh -c "cd /home|ls" 这样子也不行
如果 sh -c cd xx 随便一个目录,也没有报错

求助:如果我想使用sh -c 进入目录,应该怎么操作呢,谢谢

------解决方案--------------------
一般用 ls -R 查看目录、子目录的内容
用sh -c 也可以
JScript code
sh -c "cd /home; ls"

------解决方案--------------------
sh -c cd /home 
这样是不行的,这样会启动一个新的shell执行那个cd操作,执行完成之后,shell就结束了,不会影响当前shell
------解决方案--------------------
这肯定不行啊,你要知道你直接调用脚本执行是要创建子进程的,这样cd 是在子进程的改变,所以调用结束后返回父进程所以ls 的当前目录是父进程的当前目录,也就是你说的看到的还是当前目录下的ls后的效果。你可以用pwd在脚本中测试一下的。直接用shell程序执行和给一个文件+x 然后执行原理是一样的,都要创建子进程

但是source 和前两种不一样。他不会创建子进程,所以你可以得到你想要的结果。

下面以一个简单的shell 说明他们的一点区别

#! /bin/bash

cd /tmp # 当前目录不再这里;

echo "hello world";


第一种执行方式

zhanghong@ubuntu:~/shell$ ./echo.sh
hello world
zhanghong@ubuntu:~/shell$ pwd
/home/zhanghong/shell

第二种

zhanghong@ubuntu:~/shell$ bash ./echo.sh
hello world
zhanghong@ubuntu:~/shell$ pwd
/home/zhanghong/shell


第3中种

zhanghong@ubuntu:~/shell$ source ./echo.sh
hello world
zhanghong@ubuntu:/tmp$ pwd
/tmp