ITPub博客

首页 > 自动化运维 > 应用服务器 > [20230514]basename dirname命令.txt

[20230514]basename dirname命令.txt

原创 应用服务器 作者:lfree 时间:2023-05-15 10:16:01 0 删除 编辑

[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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    4006
  • 访问量
    7969346