[20230514]basename dirname命令.txt
--//工作需要,有时候知道一个文件的全路径名字,需要快速的进入该目录,copy and paste时仅仅选取路径部分,比较麻烦。
--//能不能直接写一个人简单的脚本实现这个功能。我以前就知道basename取文件名部分,而如何实现取路径部分呢?看了文档发现很简
--//单,dirname就可以实现,顺便还学习readlink命令的使用。
$ dirname /u01/app/oracle/diag/rdbms/book/book/trace/book_ora_11013.trc
/u01/app/oracle/diag/rdbms/book/book/trace
$ dirname test.txt
.
--//简单测试:
$ cd $(dirname /u01/app/oracle/diag/rdbms/book/book/trace/book_ora_11013.trc)
$ pwd
/u01/app/oracle/diag/rdbms/book/book/trace
-//建立脚本如下:
# cat /usr/local/bin/cdf
#! /bin/bash
cd $(dirname $1)
# cat /usr/local/bin/cdf
# chmod 775 /usr/local/bin/cdf
$ hash -r
$ cd
$ cdf /u01/app/oracle/diag/rdbms/book/book/trace/book_ora_11013.trc
$ pwd
/home/oracle
--//可以发现不行,因为执行cdf脚本仅仅作为子进程退出会到原来的环境设置。
# cat /usr/local/bin/cdf
#! /bin/bash
echo cd $(dirname $1)
cd $(dirname $1)
pwd
exec bash -i
$ cdf /u01/app/oracle/diag/rdbms/book/book/trace/book_ora_11013.trc
cd /u01/app/oracle/diag/rdbms/book/book/trace
/u01/app/oracle/diag/rdbms/book/book/trace
--//这样可以实现我的需求,但是产生新的bash shell,要退出两次,如果多次使用产生一堆bash shell进程。
--//想到alias,但是里面有$1,看了一些文档可以使用里面建立函数的方式实现例子:
$ alias lcd='tt() { cd $(dirname $1); }; tt'
$ lcd /u01/app/oracle/diag/rdbms/book/book/trace/book_ora_11013.trc
$ pwd
/u01/app/oracle/diag/rdbms/book/book/trace
$ tt /home/oracle/
$ pwd
/home
--//实际上自己搞复杂了,就建立一个函数cdf就ok了。
cdf ()
{
echo cd $(dirname $1)
cd $(dirname $1)
}
--//我个人的工作习惯在/etc/profile.d/目录下建立一个alias.sh文件,放入自己工作需要的别名,将上述内容加入。
# rm //usr/local/bin/cdf
$ . /etc/profile.d/alias.sh
$ cdf /u01/app/oracle/diag/rdbms/book/book/trace/book_ora_11013.trc
cd /u01/app/oracle/diag/rdbms/book/book/trace
--//补充测试:
--//如果写成这样:
# cat /usr/local/bin/cdl
#! /bin/bash
echo cd $(dirname $1)
cd $(dirname $1)
$ cd
$ cdl /u01/app/oracle/diag/rdbms/book/book/trace/book_ora_11013.trc
cd /u01/app/oracle/diag/rdbms/book/book/trace
$ pwd
/home/oracle
--//这样不行的.
--//开头加入. 或者source 就是相当于在当前bash shell进程中执行:
$ cd
$ . cdl /u01/app/oracle/diag/rdbms/book/book/trace/book_ora_11013.trc
cd /u01/app/oracle/diag/rdbms/book/book/trace
$ pwd
/u01/app/oracle/diag/rdbms/book/book/trace
--//或者执行:
$ cd
$ source cdl /u01/app/oracle/diag/rdbms/book/book/trace/book_ora_11013.trc
cd /u01/app/oracle/diag/rdbms/book/book/trace
$ pwd
/u01/app/oracle/diag/rdbms/book/book/trace
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-2952015/ ,如需转载,请注明出处,否则将追究法律责任。