免费注册 查看新帖 |

Chinaunix

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

[文本处理] 关于函数库的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-10-28 11:11 |只看该作者 |倒序浏览
请教各位一个问题,shell里建立函数库的时候按照一本教科书的方法做却总除错,步骤如下:
1、先在主目录建一个脚本,里面写了三个函数
2、在.bashrc文件中加入命令. ./$HOME/filename
3、编写脚本,在脚本里调用这三个函数,但在脚本里没有. ./$HOME/filename命令
4、重启bash后发现,运行脚本时出错,提示找不到这三个函数命令,但如果不用脚本,直接在bash里运行这三个函数名则可以成功,问题出在哪里?
注:我看了相关的帖子,也按照给出的方法做了,比如将函数用程序语言格式写,然后在/etc/profile里加入变量FPATH,但依然没有解决问题

论坛徽章:
84
每日论坛发贴之星
日期:2015-12-29 06:20:00每日论坛发贴之星
日期:2016-01-16 06:20:00每周论坛发贴之星
日期:2016-01-17 22:22:00程序设计版块每日发帖之星
日期:2016-01-20 06:20:00每日论坛发贴之星
日期:2016-01-20 06:20:00程序设计版块每日发帖之星
日期:2016-01-21 06:20:00每日论坛发贴之星
日期:2016-01-21 06:20:00程序设计版块每日发帖之星
日期:2016-01-23 06:20:00程序设计版块每日发帖之星
日期:2016-01-31 06:20:00数据库技术版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-14 06:20:00
2 [报告]
发表于 2015-10-28 11:31 |只看该作者
在脚本里显式加载库 .  $somepath/$libfilename

论坛徽章:
0
3 [报告]
发表于 2015-10-28 11:36 |只看该作者
这样的确可以,但问题是教材里说按我帖子里的步骤做了的话,不需要在脚本里加载库也可以运行


   

论坛徽章:
84
每日论坛发贴之星
日期:2015-12-29 06:20:00每日论坛发贴之星
日期:2016-01-16 06:20:00每周论坛发贴之星
日期:2016-01-17 22:22:00程序设计版块每日发帖之星
日期:2016-01-20 06:20:00每日论坛发贴之星
日期:2016-01-20 06:20:00程序设计版块每日发帖之星
日期:2016-01-21 06:20:00每日论坛发贴之星
日期:2016-01-21 06:20:00程序设计版块每日发帖之星
日期:2016-01-23 06:20:00程序设计版块每日发帖之星
日期:2016-01-31 06:20:00数据库技术版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-14 06:20:00
4 [报告]
发表于 2015-10-28 15:22 |只看该作者
fqjboy 发表于 2015-10-28 11:36
这样的确可以,但问题是教材里说按我帖子里的步骤做了的话,不需要在脚本里加载库也可以运行


教材里说的不一定对,通常只有 login shell 默认才会加载那些 profile *rc file.
你什么教材?有没有提到 login shell/interactive shell ?

论坛徽章:
84
每日论坛发贴之星
日期:2015-12-29 06:20:00每日论坛发贴之星
日期:2016-01-16 06:20:00每周论坛发贴之星
日期:2016-01-17 22:22:00程序设计版块每日发帖之星
日期:2016-01-20 06:20:00每日论坛发贴之星
日期:2016-01-20 06:20:00程序设计版块每日发帖之星
日期:2016-01-21 06:20:00每日论坛发贴之星
日期:2016-01-21 06:20:00程序设计版块每日发帖之星
日期:2016-01-23 06:20:00程序设计版块每日发帖之星
日期:2016-01-31 06:20:00数据库技术版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-14 06:20:00
5 [报告]
发表于 2015-10-28 15:41 |只看该作者
最权威的教材是 man bash

你的需求有两个方法:
       -i        If the -i option is present, the shell is interactive.

       When bash is started non-interactively, to run a shell script, for example, it looks for the variable BASH_ENV in the environment, expands its value if it appears there, and uses
       the expanded value as the name of a file to read and execute.  Bash behaves as if the following command were executed:
              if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi

但是,一般不建议隐式的去加载一些库;透明性不好,时间长了别人维护会觉得莫名奇妙: 咦 这个命令/函数怎么找不到

论坛徽章:
0
6 [报告]
发表于 2015-10-28 15:42 |只看该作者
回复 4# yjh777


    我看的是  linux+命令行和shell脚本编程宝典  这本书,这本书的14.7.2提到一句说“.bashrc文件就是这样的地方。每次无论bash shell是交互式启动,还是从已有shell启动新shell,都会在主目录下查找这个文件”,不过你说的应该是对的,谢谢!

论坛徽章:
0
7 [报告]
发表于 2015-10-28 15:44 |只看该作者
回复 5# yjh777


    你说的有道理,我只是因为看到这里,实现不了书里的代码,所以想搞清楚是怎么回事,呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP