2013-05-18 46 views
4

我是macosx上的shell編程的新手,並且有一點問題。我已經寫了下面的shell腳本:ln抱怨沒有這樣的文件或目錄

#!/bin/sh 

function createlink { 
source_file=$1 

target_file="~/$source_file" 

if [[ -f $target_file ]]; then 
    rm $target_file 
fi 

ln $source_file $target_file 
} 

createlink ".netrc" 

當我執行這個腳本,我得到的消息LN:〜/ .netrc中:沒有這樣的文件或目錄,我不知道爲什麼會這樣!你看到錯誤嗎?謝謝!

+0

如果在你的主目錄運行EXPANSION部分,該腳本將首先'rm'命名的文件,然後無法鏈接到一個文件,該文件是不存在。 '如果[[$ PWD == $ HOME]];然後回顯「錯誤信息」;出口1; fi'應該可以幫助你避免這種情況。 – msw

回答

5

問題是tilde expansion不會發生,因爲路徑處於變量值(tilde expansion發生在variable expansion之前)。您可以通過使用$HOME而不是~來改善此問題。那就是

target_file="${HOME}/${source_file}" 

這應該可以解決你的問題。

進一步閱讀:man bash

+0

非常感謝你這個快速的答案! –

相關問題