免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3474 | 回复: 12
打印 上一主题 下一主题

[文件目录] bash sub shell ?--高手请进来指点!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-12-09 20:27 |只看该作者 |倒序浏览
我在.bashrc中添加如下一个函数:
  1. function cr()
  2. {
  3.     local ANDROIDTOPFILE=build/core/envsetup.mk;
  4.     local KERNELCONFIGDIR=arch/arm/configs;

  5.     if [ -n "$TOP" -a -f "$TOP/$ANDROIDTOPFILE" ]; then
  6.         cd $TOP;
  7.     else
  8.         PWD=$(/bin/pwd);
  9.         if [ -f $ANDROIDTOPFILE ]; then
  10.             cd "${PWD}"
  11.         elif [ -d $KERNELCONFIGDIR ]; then
  12.             cd "${PWD}"
  13.         else
  14.             local HERE="$PWD";
  15.             T=;
  16.             while [ ! -f "$ANDROIDTOPFILE" -a ! -d "$KERNELCONFIGDIR" -a "$PWD" != "/" ]; do
  17.                 cd .. > /dev/null;
  18.                 T=`PWD= /bin/pwd`;
  19.             done;
  20.             cd "$HERE" > /dev/null;
  21.             if [ -f "$T/$ANDROIDTOPFILE" -o "$T/$KERNELCONFIGDIR" ]; then
  22.                 echo $T;
  23.                 cd $T;
  24.             fi;
  25.         fi;
  26.     fi
  27. }
复制代码
添加同样的一个函数:
  1. function mycr()
  2. {
  3.     function is_project_root_dir()
  4.     {
  5.         local ANDROIDTOPFILE=build/core/envsetup.mk;
  6.         local KERNELCONFIGDIR=arch/arm/configs;
  7.         local ret=0;
  8.         if [ -f $ANDROIDTOPFILE ]; then
  9.             let ret=1
  10.         fi
  11.         if [ -d $KERNELCONFIGDIR ]; then
  12.             let ret=1
  13.         fi
  14.         if [ -f .project -a -f project.properties ];then
  15.             let ret=1
  16.         fi
  17.         echo "$ret"

  18.         return 0;
  19.     }
  20.     if [ -n "$TOP" -a -f "$TOP/$ANDROIDTOPFILE" ]; then
  21.         echo "auto change to TOP dir:$TOP"
  22.         cd $TOP;
  23.         return 0;
  24.     fi
  25.     if [ -n $OLDPWD ];then
  26.         local SAVE_OLDPWD="$OLDPWD"
  27.     fi
  28.     local PWD=$(/bin/pwd);
  29.     local HERE="$PWD";
  30.     T=;
  31.     while [ $(is_project_root_dir) != 1 -a "$PWD" != "/" ];
  32.     do
  33.         cd .. > /dev/null;
  34.         T=`PWD= /bin/pwd`;
  35.         echo "$T"
  36.     done;
  37.     pwd
  38.     if [ $(is_project_root_dir) == 1 ]; then
  39.         echo $T;
  40.         cd "$HERE" > /dev/null;
  41.         cd "$T";
  42.         pwd
  43.     else
  44.         if [ -n $SAVE_OLDPWD ];then
  45.             OLDPWD=$(echo $SAVE_OLDPWD)
  46.         fi
  47.         cd "$HERE" > /dev/null;
  48.     fi;
  49.     pwd
  50. }
复制代码
但是:cr这一个函数能起作用,mycr这一个函数却不能起作用.测试如下:
  1. karlzheng@latop-dell780:~/dev/prj/git_android-4.1.1_r1/out/target/product/smdk4x12$ pwd
  2. /home/karlzheng/dev/prj/git_android-4.1.1_r1/out/target/product/smdk4x12
  3. karlzheng@latop-dell780:~/dev/prj/git_android-4.1.1_r1/out/target/product/smdk4x12$
  4. karlzheng@latop-dell780:~/dev/prj/git_android-4.1.1_r1/out/target/product/smdk4x12$ cr
  5. /home/karlzheng/dev/prj/git_android-4.1.1_r1
  6. karlzheng@latop-dell780:~/dev/prj/git_android-4.1.1_r1$ cd -
  7. /home/karlzheng/dev/prj/git_android-4.1.1_r1/out/target/product/smdk4x12
  8. karlzheng@latop-dell780:~/dev/prj/git_android-4.1.1_r1/out/target/product/smdk4x12$ mycr
  9. /home/karlzheng/dev/prj/git_android-4.1.1_r1/out/target/product
  10. /home/karlzheng/dev/prj/git_android-4.1.1_r1/out/target
  11. /home/karlzheng/dev/prj/git_android-4.1.1_r1/out
  12. /home/karlzheng/dev/prj/git_android-4.1.1_r1
  13. /home/karlzheng/dev/prj/git_android-4.1.1_r1
  14. /home/karlzheng/dev/prj/git_android-4.1.1_r1
  15. /home/karlzheng/dev/prj/git_android-4.1.1_r1
  16. /home/karlzheng/dev/prj/git_android-4.1.1_r1
  17. karlzheng@latop-dell780:~/dev/prj/git_android-4.1.1_r1/out/target/product/smdk4x12$
复制代码
个人感觉是sub shell产生的问题,请高手指点,谢谢!

论坛徽章:
0
2 [报告]
发表于 2012-12-09 20:47 |只看该作者
回复 1# karlzheng_cu


   
黑哥进来指点一下啊....

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
3 [报告]
发表于 2012-12-09 22:30 |只看该作者
回复 2# karlzheng_cu


    不是起作用了吗?

论坛徽章:
0
4 [报告]
发表于 2012-12-10 09:06 |只看该作者
blackold 发表于 2012-12-09 22:30
回复 2# karlzheng_cu

没起作用啊。执行:mycr后当前路径应该是切换到:/home/karlzheng/dev/prj/git_android-4.1.1_r1的,但现在还在:
karlzheng@latop-dell780:~/dev/prj/git_android-4.1.1_r1/out/target/product/smdk4x12$  这一个目录....

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
5 [报告]
发表于 2012-12-10 09:25 |只看该作者
回复 4# karlzheng_cu


    哦,      local ANDROIDTOPFILE=build/core/envsetup.mk;
        local KERNELCONFIGDIR=arch/arm/configs;把这两行写在 mycr 里面试试

论坛徽章:
0
6 [报告]
发表于 2012-12-10 11:10 |只看该作者
blackold 发表于 2012-12-10 09:25
回复 4# karlzheng_cu

也是一样;我感觉是因为调用了:is_project_root_dir 这一个函数导致的。。。但不知道为什么。。。。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
7 [报告]
发表于 2012-12-10 12:16 |只看该作者
回复 6# karlzheng_cu


    没有道理吧。修改了后执行时,输出什么?

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
8 [报告]
发表于 2012-12-10 12:44 |只看该作者
set -xv观察一下

论坛徽章:
0
9 [报告]
发表于 2012-12-10 14:43 |只看该作者
谢谢两位!发现问题所在了:PWD是一个bash的环境变量,把local PWD定义的local去掉就可以了....

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
10 [报告]
发表于 2012-12-10 15:06 |只看该作者
回复 9# karlzheng_cu


    哦,这个没有影响吧?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP