shell 关于路径记忆的问题($0、pwd、dirname、readlink)

shell 关于路径记忆的问题($0、pwd、dirname、readlink)

路径记忆,就是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种执行结果如下:

https://qnimg.ffing.cn/wp-content/uploads/2022/01/image-11.png?imageView2/0/q/75|watermark/1/image/aHR0cHM6Ly9xbmltZy5mZmluZy5jbi9mbl9sb2dvLnBuZw==/dissolve/55/gravity/SouthEast/dx/0/dy/0

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名!

good good study, day day up!

发表评论

textsms
account_circle
email

shell 关于路径记忆的问题($0、pwd、dirname、readlink)
路径记忆,就是shell运行时,read前,先获取上次的路径。 我的方法很简单,就是将shell名和路径名保存到家目录隐藏文件中。(以shell名做基数) 原来写shell也没注意多,都是随…
扫描二维码继续阅读
2022-01-10