2010-10-05 39 views
7

Tập lệnh bash của tôi nhận được hai đối số với các thư mục (tồn tại và mọi thứ).Tạo liên kết tượng trưng trong tập lệnh bash trong một thư mục khác

Bên trong một đầu tiên tôi muốn tạo một liên kết đến thứ hai

Giả sử tôi có các thư mục/home/mờ/A và/home/mờ/b, tôi gọi là kịch bản như thế này:

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

tôi muốn nhìn thấy một liên kết tượng trưng trong một trỏ đến b

Và tất nhiên, chỉ làm

ln -s $2 $1/link 

trong tập lệnh không hoạt động ... (nó sẽ tạo liên kết tìm kiếm ./b bên trong a)

Đây chỉ là một ví dụ rất đơn giản, tôi đang tìm một tập lệnh sẽ đủ chung chung để một vài tham số khác nhau (tuyệt đối hay tương đối đường ... vv ...)

Trả lời

2

này cung cấp cho một thử:

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

nếu bạn có readlink.

Hoặc có lẽ sự thay đổi này trên câu trả lời của larsmans:

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

Với readlink nó hoạt động tốt (đó là 'ln' thay vì 'ls') – Matthieu

+0

@Matthieu: Typo cố định, cảm ơn. –

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

nó không thành công, tìm kiếm $ 1/link bên $ 2 ... ngay bây giờ, Tôi chủ yếu cố gắng bằng cách chỉ sử dụng các đường dẫn tương đối cho cả hai đối số ... – Matthieu

+0

Bạn có tên đường dẫn có dấu cách trong đó không? Điều đó có thể giải thích tại sao nó không hoạt động nếu không có trích dẫn thích hợp (như được minh họa bởi Dennis Williamson). –

1

Đây là một dễ thương một liner:

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

Tôi thích điều đó ... – Matthieu

+2

Bạn có thể tránh thoát khó xử bằng cách sử dụng '$()' thay vì backticks: 'ln -s" $ (cd "$ (dirname" $ ​​2 ")"; pwd)/$ (tên cơ sở " $ 2 ")" "$ 1/liên kết" ' –

Các vấn đề liên quan