2010-10-05 13 views
7

Mój skrypt basha otrzymuje dwa argumenty z folderami (które istnieją i wszystko).Tworzenie dowiązania symbolicznego w skrypcie basha w innym folderze

Wewnątrz pierwszej chcę, aby utworzyć łącze do drugiego

Załóżmy, że mam foldery/home/mat/A i/home/mat/b, wzywam skrypt tak:

/home/matt # ./my_script ./a ./b 

chcę zobaczyć link symboliczny wewnątrz który wskazuje na b

i oczywiście, po prostu robi

ln -s $2 $1/link 

w skrypcie nie działa ... (utworzy łącze, które szuka ./b wewnątrz a)

To jest bardzo prosty przykład, szukam skryptu, który będzie na tyle ogólny, aby przybierać różne argumenty (ścieżkę bezwzględną lub względną ... etc ...)

Odpowiedz

2

spróbuj tego:

ln -s "$(readlink -e "$2")" "$1/link" 

jeśli masz readlink.

A może to wariacja na odpowiedź przez larsmans:

cd "$2" 
dir=$(pwd) 
cd - 
ln -s "$dir" "$1/link" 
+1

Z readlink działa dobrze (to 'ln' zamiast "ls") – Matthieu

+0

@Matthieu: Naprawiono typo, dzięki. –

1
#!/bin/sh 
cd $2 
ln -s "`pwd`" $1/link 
+0

to się nie powiedzie, patrząc na $ 1/ogniwo wewnątrz $ 2 ... teraz, W większości próbuję, używając tylko względne ścieżki dla obu argumentów ... – Matthieu

+0

Czy masz ścieżki z spacji w nich? To może wyjaśnić, dlaczego nie działa bez odpowiedniego cytowania (czego przykładem jest Dennis Williamson). –

1

Oto kolejny ładny jedna wkładka:

ln -s `cd \`dirname $2\`; pwd`/`basename $2` $1/link 
+0

Podoba mi się ... – Matthieu

+2

Możesz uniknąć niewygodnego ucieczki, używając '$()' zamiast zwrotów: 'ln -s" $ (cd "$ (dirname" $ ​​2 ")"; pwd)/$ (basename " 2 $ ")" "1 $/link" ' –

Powiązane problemy