ln complains about no such file or directory
Asked Answered
D

1

6

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!

Dyslexia answered 18/5, 2013 at 9:50 Comment(1)
If run in your home directory, this script will first rm the named file and then fail to link to a file that isn't there. if [[ $PWD == $HOME ]] ; then echo "error message"; exit 1; fi should help you avoid that.Frosted
Y
7

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

Yung answered 18/5, 2013 at 9:57 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.