2010-10-05 16 views
7

Mi secuencia de comandos bash obtiene dos argumentos con carpetas (que existen y todo).Crear un enlace simbólico en una secuencia de comandos bash en una carpeta diferente

Dentro de la primera a la que quiero crear un enlace a la segunda

Supongamos que tengo las carpetas/home/mate/a y/home/mate/b, llamar al script como el siguiente:

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

quiero ver un enlace simbólico dentro de una que apunta aab

Y, por supuesto, sólo haciendo

ln -s $2 $1/link 

en el script no funciona ... (creará un enlace que busca un ./b dentro de un)

Esto es solo un ejemplo muy simple, estoy buscando un script que sea lo suficientemente genérico como para tomar diferentes argumentos (ruta absoluta o relativa ... etc ...)

Respuesta

2

seguirlo:

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

si tiene readlink.

O tal vez esta variación en la respuesta por larsmans:

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

Con readlink funciona bien (es 'ln' en lugar de 'ls') – Matthieu

+0

@Matthieu: error de tipografía, gracias. –

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

falla, en busca de $ 1/enlace dentro de $ 2 ... en este momento, Lo intento principalmente utilizando solo rutas relativas para ambos argumentos ... – Matthieu

+0

¿Tiene rutas de acceso con espacios en ellas? Eso podría explicar por qué no funciona sin las citas adecuadas (como lo ejemplifica Dennis Williamson). –

1

Aquí es otra linda de una sola línea:

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

Me gusta eso ... – Matthieu

+2

Puede evitar el escape incómodo usando '$()' en lugar de barras invertidas: 'ln -s" $ (cd "$ (dirname" $ ​​2 ")"; pwd)/$ (basename " $ 2 ")" "$ 1/link" ' –

Cuestiones relacionadas