2010-10-05 7 views
7

Мой скрипт bash получает два аргумента с папками (которые существуют и все).Создание символической ссылки в скрипте bash в другой папке

Внутри первым я хочу, чтобы создать ссылку на втором

Пусть я папка/дома/матовую/а и/дома/матовый/б, я называю сценарий, как это:

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

Я хочу увидеть символическую ссылку в, что указывает на б

И конечно, просто делает

ln -s $2 $1/link 

в скрипте не работает ... (он создаст ссылку, которая ищет ./b внутри a)

Это просто очень простой пример. Я ищу сценарий, который будет достаточно общим для того, чтобы принимать различные аргументы (абсолютный или относительный путь ... и т.д. ...)

ответ

2

Дайте это попробовать:

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

, если у вас есть readlink.

Или, возможно, это вариация на ответ по larsmans:

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

С readlink он работает хорошо (это 'ln' вместо 'ls') – Matthieu

+0

@Matthieu: Typo fixed, спасибо. –

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

это не удается, ищет $ 1/ссылку в $ 2 ... прямо сейчас, Я в основном пытаюсь использовать только относительные пути для обоих аргументов ... – Matthieu

+0

У вас есть пути с пробелами в них? Это может объяснить, почему это не работает без правильного цитирования (как показано Деннисом Уильямсоном). –

1

Вот еще один милый один лайнер:

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

Мне нравится это ... – Matthieu

+2

Вы можете избежать неудобного экранирования с помощью '$()' вместо backticks: 'ln -s '$ (cd" $ (dirname "$ 2") "; pwd)/$ (basename" $ 2 ")" "$ 1/link" ' –

Смежные вопросы