[20230514]basename dirname命令.txt

lfree發表於2023-05-15

[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部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2952015/,如需轉載,請註明出處,否則將追究法律責任。

相關文章