设为首页
收藏本站
用户名
Email
自动登录
找回密码
密码
登录
注册
快捷导航
平台
Portal
论坛
BBS
文库
项目
群组
Group
我的博客
Space
搜索
搜索
热搜:
shell
linux
mysql
本版
用户
LinuxSir.cn,穿越时空的Linuxsir!
»
论坛
›
Linux 综合讨论区 —— LinuxSir.cn
›
shell进阶应用、shell编程
›
如何让脚本常驻内存?
1
2
/ 2 页
下一页
返回列表
查看:
1251
|
回复:
12
如何让脚本常驻内存?
[复制链接]
LYOO
LYOO
当前离线
积分
782
IP卡
狗仔卡
发表于 2003-5-2 11:52:08
|
显示全部楼层
|
阅读模式
正在写一个目录堆栈的脚本,想在控制台下实现窗口文件管理器中常见的“前进”“后退”目录导航功能,有一个问题:如何实现对控制台下用户目录操作的跟踪?也就是说这个脚本须常驻内存,我想到的方法是:使用
while ture; do
sleep 1
done
复制代码
的笨方法,用这个死循环每隔一秒扫描一次$PWD发现不同就入栈,但这个方法还是可能丢失用户目录操作而且也很浪费,不知还有什么更好的方法?
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
显身卡
KornLee
KornLee
当前离线
积分
6960
IP卡
狗仔卡
发表于 2003-5-2 12:34:28
|
显示全部楼层
难度够大的!
要想节约资源,提高运行速度,我一般采用把函数(脚本代码)放在ENV环境文件中的方法,这样他就不以文件的形式存在在磁盘中,而是当系统读取ENV文件时,自动把函数调入内存,也可以变相达到了常驻内存的目的,即调用他的时候不必每次引用,shell执行命令的顺序是:内置命令,函数,可执行程序,当然,把函数自动添加到内置命令中也是好办法...
不知道我理解的是否有误?
回复
支持
反对
使用道具
举报
显身卡
LYOO
LYOO
当前离线
积分
782
IP卡
狗仔卡
楼主
|
发表于 2003-5-2 18:44:27
|
显示全部楼层
呵呵,多谢javalee,又学了一招。
我想“函数自动添加到内置命令中也是好办法...”更有助于解决这个问题,不知如何实现?感觉不是脚本就能搞定的。
回复
支持
反对
使用道具
举报
显身卡
KornLee
KornLee
当前离线
积分
6960
IP卡
狗仔卡
发表于 2003-5-2 18:57:01
|
显示全部楼层
对的,好像是这么一个过程,先用C写一个函数,如:a.c,然后用cc编译,产生一个目标文件a.o 再用ld 命令创建一个共享库,最后用builtin shell内建的命令注册,我也不十分清楚,还是看看书吧~~
回复
支持
反对
使用道具
举报
显身卡
LYOO
LYOO
当前离线
积分
782
IP卡
狗仔卡
楼主
|
发表于 2003-5-2 21:38:01
|
显示全部楼层
如何在脚本中操作环境变量?
想定义一个作用于console的全局变量,于是在.bash_profile中定义了一个变量export env=“ ”,我希望在脚本中对其赋值操作,并且env要记住在脚本中的赋值,因为下次执行该脚本时要根据上次的赋值进行相关操作。也不知我说清楚了没有?我发现在脚本中可以调用env的值,也能对它赋新值,但下次调用时还是.bash_profile中的初始值。请教javalee有何解决方法。
回复
支持
反对
使用道具
举报
显身卡
KornLee
KornLee
当前离线
积分
6960
IP卡
狗仔卡
发表于 2003-5-2 22:26:50
|
显示全部楼层
不知道我理解得对不对?;)
我发现在脚本中可以调用env的值,也能对它赋新值,但下次调用时还是.bash_profile中的初始值。
这句实际上是环境变量和局部变量之间的关系,就是bashrc继承profile,也可以说是有些像父shell和子shell之间的继承与被继承的关系,你所说的可以对他进行赋新的值的操作,是在你当前基于这个脚本(局部)环境下,跟你在ENV(全局环境)那个赋值已经没有关系啦~,当你退出这个进程(脚本)时,他自动清除,环境变量和局部变量,就像函数,你在当前定义的函数,可以执行,如果你退出这个环境,那么他就不存在!除非你在ENV环境文件中定义,!
解决方法呢??----饶了我吧~~~
回复
支持
反对
使用道具
举报
显身卡
LYOO
LYOO
当前离线
积分
782
IP卡
狗仔卡
楼主
|
发表于 2003-5-2 22:44:57
|
显示全部楼层
翻了一下资料:.bash_profile中定义的变量是只在登录时初始化一次,在本次登录过程中全局有效。而.bashrc中定义的变量则对每个新开的shell进程都重新初始化。更深入的解释没找到,如果javalee兄的理解是正确的,要实现我的想法,只能用生成记录文件的方法了,那可真不爽呀,呵呵,我希望javalee的理解是错的:p
回复
支持
反对
使用道具
举报
显身卡
KornLee
KornLee
当前离线
积分
6960
IP卡
狗仔卡
发表于 2003-5-2 23:24:44
|
显示全部楼层
无论对错,我尽力啦~~,以后还要向LYOO请教,OK?!;)
回复
支持
反对
使用道具
举报
显身卡
LYOO
LYOO
当前离线
积分
782
IP卡
狗仔卡
楼主
|
发表于 2003-5-3 16:29:10
|
显示全部楼层
我使用的环境是bash 2.05a.0(1)-release
实验一
-------
为了使env全局可见(而不是在每个新的shell进程中重新初始化)
于是我在.bash_profile中加入
env="ok"
export env
现在我用如下的脚本对其进行检验
#!/bin/bash
echo $env
env="me"
echo "env now is $env"
执行脚本的结果是
ok
env now is me
由“ok”可见我已成功定义了全局变量(使用printenv也可以看到env=ok)
“env now is me”表明已在脚本中也能成功为env赋值。
理论上来说现在,现在如果用printenv或echo $env的结果应该是env=me,但实际结果是env=ok。
换一种方法,直接在shell提示符下执行env=me,然后使用printenv或echo $env,发现结果与预计的一致:env=me
实验二
------
写如下一个脚本
#!/bin/sh
X=15
export X
执行完该脚本之后,在shell下使用echo $X或printenv查看变量X并不存在。
由上述的实验,我得出的结论是:在bash中,环境中定义的全局变量在脚本中可读不可写,而脚本内定义的全局变量,在脚本外也是不可见的。
而我的希望是在环境中定义一个变量,然后使用脚本对其进行写操作。
不知我的理解是否正确?(我觉得是错的,因为这样export就毫无意义了,但不知错在哪)
回复
支持
反对
使用道具
举报
显身卡
LYOO
LYOO
当前离线
积分
782
IP卡
狗仔卡
楼主
|
发表于 2003-5-3 22:19:58
|
显示全部楼层
有了一定进展。
使用. ./abc.sh的方式来执行一个脚本是可以操作上述环境变量的,原理是在当前shell进程中操作环境变量。
但如何在子进程中操作环境变量,还没找到解决方法。
回复
支持
反对
使用道具
举报
显身卡
下一页 »
1
2
/ 2 页
下一页
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖后跳转到最后一页
Copyright © 2002-2023
LinuxSir.cn
(http://www.linuxsir.cn/) 版权所有 All Rights Reserved.
Powered by
RedflagLinux!
技术支持:
中科红旗
|
京ICP备19024520号
快速回复
返回顶部
返回列表