今天在分析oracle自带的脚本sqldeveloper.sh的时候发现的:
[oracle@linux_64 sqldeveloper]$ cat sqldeveloper.sh
#!/bin/bash
cd “`dirname $0`”/sqldeveloper/bin && bash sqldeveloper $*
# `dirname $0 ` 到底起什么作用:
[oracle@linux_64 sqldeveloper]$ echo `dirname $0`
dirname: invalid option – ‘b’
Try `dirname --help’ for more information.
#直接执行并不能得到结果
#在命令行状态下单纯执行 `dirname $0` 是毫无意义的。只有在脚本中它返回当前路径的"."
#在/tmp下创建1.sh
[oracle@linux_64 sqldeveloper]$ cat /tmp/1.sh
cd `dirname $0`
echo `pwd`
#执行脚本
[oracle@linux_64 sqldeveloper]$ sh /tmp/1.sh
/tmp
#可见执行 dirname $0
是当前路径的意思
#既然如此就做一个实验,将sqldeveloper.sh文件软连接到oracle用户的家目录
[oracle@linux_64 ~]$ ln -s /home/oracle/app/oracle/product/11.2.0/dbhome_1/sqldeveloper/sqldeveloper.sh /home/oracle
#再次执行脚本
[oracle@linux_64 ~]$ ./sqldeveloper.sh
./sqldeveloper.sh: line 2: cd: ./sqldeveloper/bin: No such file or directory
#可见脚本并不能执行,因为执行脚本的目录下没有./sqldeveloper/bin目录