shell-目录判断
兜兜转转好像又回到了之前的那个问题:命令行中能执行的东西,脚本可不一定能够执行。可能shell不同,或者那种比较隐蔽的问题,比如$COLS这种变量只在命令行中才起作用。继之前发现的这些问题后,今天又遇到了一个关于路径的问题。
问题都是因为使用了~
这个符号来代表家目录导致的。
这是一个存储路径的文件。
1 | ~/Desktop |
我需要从这个文件中读取,并判断是否存在这个目录。
1 | !/bin/bash |
看着一点毛病都挑不出来是不是,可是运行脚本的结果是全部不存在这些目录,但是这些目录真的就存在。
好吧,sh -x my.sh
进行调试,显示没有问题
1 | + read line |
明明就有这个目录啊,为什么判断的结果是不存在呢?苦思不得其解,在终端执行这个语句也没有问题,我就奇怪了,难怪是加了单引号的问题?于是在脚本中为找到的字符串加了双引号,但是却没有任何效果。
后来突然想到是不是路径问题,可能需要使用绝对路径
1 | /home/narcissus/Desktop |
然后再运行,竟然好了!结论就是应该写绝对路径,在终端中shell帮我们把~
解释为/home/narcissus
。但是在脚本中进行if判断的时候,它不会进行这个解释。这个~
在终端下进行if判断,它却能解释为绝对路径,真的是有点奇怪!shell脚本也是使用的bash进行解释的啊,为什么脚本就不行,终端却可以呢?看来脚本和终端差距还是有点大,自以为shell已经到了随手写脚本的程度,其实还是有很多不懂的地方啊!所以永远不要眼高手低,觉得它简单,只能说too young too simple