2010-08-26 86 views
0

使用Bash腳本,是否有辦法確定鏈接指向哪個目錄,然後根據結果將其切換到另一個目錄?如何確定鏈接指向哪個目錄使用bash

例如,說我有兩個以下目錄:

/var/data/1//var/data/2/

我有一個鏈接到他們中的一個,比方說,data_link它目前連結/var/data/1/

當腳本被觸發,我希望它將鏈接交換到/var/data/2/(即ln -s /var/data/2/ /somepath/data_link)。

當腳本再次觸發時,會發生相反的情況(即ln -s /var/data/1/ /somepath/data_link)等等。什麼是通過Bash腳本執行此操作的最簡單方法?

回答

1

使用readlink命令來獲得一個鏈接的內容:

$TARGET=$(readlink "$LINK") 

然後使用標準if檢查當前值,rm將其刪除,並ln你表示與新重新創建期望的目標。

+1

請注意'readlink'實用程序是非標準的。 – 2010-08-26 18:27:18

4

不幸的是,unix實用程序的標準集不包含對readlink系統調用的簡單訪問。某些系統包含readlink命令。如果可用,那麼readlink foo很有可能打印符號鏈接foo的目標。如果您覺得使用選項很有誘惑力,請注意,此命令有多個版本可以浮動;即使在Linux發行版之間,您也不會獲得可移植性。

如果您有perl可用,perl -e 'print readlink $ARGV[0]' mylink將打印mylink的目標。

如果您需要一種可移植的方式,並且沒有Perl或其他任何理智的東西,那麼您也許可以分析ls -l mylink的輸出。

如果您有一個有權修改的目錄的符號鏈接,那麼$(cd mylink && command -p pwd)是鏈接最終目標的絕對路徑。例如,如果foo/var/tmp/bar的符號鏈接,bar/var/tmp中的目錄,並且/var/tmp是到/tmp的符號鏈接,則此命令將生成/tmp/bar

相關問題