dirname 命令使用示例
NAME
dirname - strip last component from file name
示例一 來自手冊頁的例子
$ dirname /usr/bin/sort
/usr/bin
$ dirname stdio.h
.
示例二
$ dirname /usr/bin
/usr
$ dirname /usr/bin/
/usr
腳本中獲取 腳本文件所在的絕對路徑
shellPath=$(cd "$(dirname "$0")"; pwd)
echo $shellPahtshell
用途說明
dirname命令能夠取給定路徑的目錄部分(strip non-directory suffix from file name)。這個命令不多直接在shell命令行中使用,我通常把它用在shell腳本中,用於取得腳本文件所在目錄,而後將當前目錄切換過去。根據手冊頁上說的「Print NAME with its trailing /component removed; if NAME contains no /’s, output ‘.’ (meaning the current directory).」,彷佛說「取給定路徑的目錄部分」 並不能很準確的歸納dirname命令的用途。Linux下還有一個命令是basename,它與dirname相反,是取得文件名稱部分。bash
經常使用參數
無。ide
使用示例
示例一 來自手冊頁的例子
[root@qzt196 ~]# dirname /usr/bin/sort /usr/bin [root@qzt196 ~]# dirname stdio.h . [root@qzt196 ~]#函數
示例二
[root@qzt196 ~]# dirname /usr/bin /usr [root@qzt196 ~]# dirname /usr/bin/ /usr命令行
注意:此處的輸出結果,彷佛有點怪。這應該看下dirname命令的源代碼才能解釋了。code
示例三 在bash腳本中的運用
Bash代碼 收藏代碼
#!/bin/sh component
cd $(dirname "$0") || exit 1 crontab
這個寫法我常常用到,由於有時候腳本執行時沒法肯定是在哪一個目錄,好比腳本用在crontab中時。ip
另外一個寫法是:cd dirname $0
其中反引號··等同於$()。rem
示例四 與另一種截取目錄的方法的比較
能夠用${pathname%/*}截取掉pathname後面的文件部分。
[root@jfht ~]# pathname=/usr/bin/sort; echo $(dirname $pathname) ${pathname%/} /usr/bin /usr/bin [root@jfht ~]# pathname=/usr/bin/; echo $(dirname $pathname) ${pathname%/} /usr /usr/bin [root@jfht ~]# pathname=/usr/bin; echo $(dirname $pathname) ${pathname%/} /usr /usr [root@jfht ~]# pathname=/usr/; echo $(dirname $pathname) ${pathname%/} / /usr [root@jfht ~]# pathname=/usr; echo $(dirname $pathname) ${pathname%/} / [root@jfht ~]# pathname=/; echo $(dirname $pathname) ${pathname%/} / [root@jfht ~]# pathname=stdio.h; echo $(dirname $pathname) ${pathname%/*} . stdio.h [root@jfht ~]#
問題思考