当前位置: 技术问答>linux和unix
linux下执行sh -c cd /home 没有效果
来源: 互联网 发布时间:2017-02-14
本文导语: 我在linux下执行sh -c cd /home 执行后没效果, 如果执行sh -c cd /home|ls 看到的还是当前目录下的ls后的效果 sh -c "cd /home|ls" 这样子也不行 如果 sh -c cd xx 随便一个目录,也没有报错 求助:如果我想使用sh -c ...
我在linux下执行sh -c cd /home 执行后没效果,
如果执行sh -c cd /home|ls 看到的还是当前目录下的ls后的效果
sh -c "cd /home|ls" 这样子也不行
如果 sh -c cd xx 随便一个目录,也没有报错
求助:如果我想使用sh -c 进入目录,应该怎么操作呢,谢谢
如果执行sh -c cd /home|ls 看到的还是当前目录下的ls后的效果
sh -c "cd /home|ls" 这样子也不行
如果 sh -c cd xx 随便一个目录,也没有报错
求助:如果我想使用sh -c 进入目录,应该怎么操作呢,谢谢
|
一般用 ls -R 查看目录、子目录的内容
用sh -c 也可以
用sh -c 也可以
sh -c "cd /home; ls"
|
这肯定不行啊,你要知道你直接调用脚本执行是要创建子进程的,这样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
但是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
|
sh -c cd /home
这样是不行的,这样会启动一个新的shell执行那个cd操作,执行完成之后,shell就结束了,不会影响当前shell
这样是不行的,这样会启动一个新的shell执行那个cd操作,执行完成之后,shell就结束了,不会影响当前shell