路径记忆,就是shell运行时,read前,先获取上次的路径。
我的方法很简单,就是将shell名和路径名保存到家目录隐藏文件中。(以shell名做基数)
原来写shell也没注意多,都是随写随用,而且shell都是自己负责,按照自己模式管理的。
前段时间又写了个路径记忆,发现冲突了???后来发现。。。呵呵呵,原来是shell名没改只是换了个目录,导致了历史路径。
这里我想了两个解决方法:
第一种:在家目录创建隐藏文件中保存:shell路径和需要记忆的路径
第二种:在shell脚本所在目录,创建隐藏文件,保存shell名和需要记忆路径
=============================================================
在获取路径时,请看下我做的测试,有助于获取路径:
注意事项:(官方这4个命令定义不够严谨,请看分析结果!)
- $0:获取当前shell名称
- pwd:获取当前路径
- dirname:获取路径目录
- readlink:获取真实路径
例:
/opt/shell下编辑脚名为test.sh,并创建软连接到/root下命名为ltest.sh。
脚本内容如下:
echo $0
pwd
dirname $0
readlink -f $0
dirname `readlink -f $0`
在/opt/shell下执行test.sh
在/opt/shell下执行【带绝对路径】test.sh
在/root下执行软连接ltest.sh
在/root下执行【带绝对路径】软连接ltest.sh
4种执行结果如下:
4次执行,其实执行的都是/opt/shell/test.sh
从执行结果分析:
- $0:获取shell执行时的路径+shell名!
- shell执行没有路径,$0=空路径+shell名=shell名
- shell执行带有路径,$0=带的路径+shell名=路径/shell名
- dirname:获取shell执行时的目录!
- shell执行没有路径,dirname=空(.当前目录)
- shell执行带有路径,dirname=带的路径
- pwd:获取当前路径!
- readlink:因为加了-f 参数,只会寻找最终路径,所以readlink没有改变
总结:
获取路径还是要依赖readlink -f,获取绝对路径后,再dirname获取目录、获取shell名!
发表评论