Vấn đề
Tôi có kịch bản bash này:'ln -s` trong một kịch bản đóng vai trò như' cp`
ACTIVE_DB=$(grep -P "^[ \t]*db.active" config.properties | cut -d= -f2 | tr -s " ")
echo $ACTIVE_DB
if [ "$ACTIVE_DB" = "A" ]
then
ln -sf config-b.properties config.properties
else
ln -sf config-a.properties config.properties
fi
config-a.properties
db.active = A
config-b. thuộc tính
db.active = B
Khi tôi chạy tập lệnh, một đồng py (= cp
) được thực hiện và config.properties
thường không phải là một liên kết tượng trưng (cũng không phải là liên kết thực tế cho vấn đề đó) mà là một tệp hoàn toàn mới có cùng nội dung như config-a.properties
hoặc config-b.properties
.
$ ls -li
53 -rw-r--r-- 1 ogregoir ogregoir 582 Sep 30 15:41 config-a.properties
54 -rw-r--r-- 1 ogregoir ogregoir 582 Sep 30 15:41 config-b.properties
56 -rw-r--r-- 1 ogregoir ogregoir 582 Oct 2 11:28 config.properties
Khi tôi chạy này trong lời nhắc bằng tay từng dòng, tôi không có rắc rối và một liên kết tượng trưng thực sự là luôn luôn tạo ra và config.properties
điểm về phía config-a.properties
hoặc config-b.properties
.
$ ls -li
53 -rw-r--r-- 1 ogregoir ogregoir 582 Sep 30 15:41 config-a.properties
54 -rw-r--r-- 1 ogregoir ogregoir 582 Sep 30 15:41 config-b.properties
55 lrwxrwxrwx 1 ogregoir ogregoir 20 Oct 2 11:41 config.properties -> config-b.properties
Ghi chú
- Không có tập tin đang mở bất cứ nơi nào khác (Tôi là người dùng tích cực duy nhất và các ứng dụng bằng cách sử dụng cấu hình không hoạt động).
- Đôi khi
ln -sf
hoạt động bình thường, nhưng quy tắc thông thường là nó tạo bản in ra giấy. - Tập lệnh được chạy từ một thư mục khác, nhưng
cd
s vào thư mục nơi tệpconfig*.properties
được đặt trước khi thực hiện các tác vụ tại đây. - Tập lệnh dài hơn nhiều, nhưng đây là ví dụ ngắn nhất tạo lại lỗi.
bash
phiên bản là 4.1.2 (địa phương, vì vậy tôi không quan tâm đến shellshock).ln
phiên bản là 8.4.- Hệ điều hành: Red Hat Enterprise Máy chủ Linux phát hành 6.5 (Santiago).
- Hệ thống tệp được sử dụng cho thư mục đó: ext4.
Câu hỏi
- Tại sao không kịch bản của tôi luôn tạo ra một liên kết tượng trưng nhưng làm cho một bản sao cứng?
- Làm cách nào để bắt buộc liên kết tượng trưng ở đây?
Lệnh 'ln' sẽ * không * tạo bản sao. Không, – hek2mgl
Có, tôi có thể đọc 'man ln', nhưng nó có ... ngẫu nhiên! –
Hệ điều hành nào và hệ thống tập tin nào? – Cyrus