I'm new in shell programming on macosx and have a little problem. I've written the following shell script:
#!/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"
When I'm executing this script I get the message ln: ~/.netrc: No such file or directory and I don't know why this happened! Do you see the error? Thanks!
The issue is that tilde expansion
will not happen as the path is in a variable value (tilde expansion
happens before variable expansion
). You can ameliorate this issue by using $HOME
instead of ~
. That is
target_file="${HOME}/${source_file}"
This should solve your problem.
Further reading: EXPANSION
section of man bash