Người dùng gọi tập lệnh của tôi bằng một đường dẫn tệp sẽ được tạo hoặc ghi đè tại một số điểm trong tập lệnh, như foo.sh file.txt
hoặc foo.sh dir/file.txt
.
Hành vi tạo hoặc ghi đè giống như các yêu cầu đặt tệp ở bên phải của >
toán tử chuyển hướng đầu ra hoặc chuyển nó dưới dạng đối số tee
(thực tế, chuyển nó làm đối số cho tee
chính xác những gì tôi đang làm ).
Trước khi tôi đi vào can đảm của tập lệnh, tôi muốn kiểm tra hợp lý nếu tập tin có thể được tạo / ghi đè, nhưng không thực sự tạo ra nó. Kiểm tra này không phải là hoàn hảo, và vâng tôi nhận ra rằng tình huống có thể thay đổi giữa kiểm tra và điểm mà tập tin thực sự được viết - nhưng ở đây tôi ổn với giải pháp loại nỗ lực tốt nhất để tôi có thể bảo lãnh sớm trong trường hợp đường dẫn tệp không hợp lệ.
Ví dụ về lý do tệp không thể được tạo:
- tập tin chứa một thành phần thư mục, giống như
dir/file.txt
nhưng thư mụcdir
không tồn tại - người dùng không có quyền ghi trong thư mục được chỉ định (hoặc CWD nếu không có thư mục nào được chỉ định
Có, tôi nhận ra rằng việc kiểm tra quyền "lên phía trước" không phải là UNIX Way ™ , thay vào đó tôi chỉ nên thử thao tác và yêu cầu sự tha thứ sau đó. Tuy nhiên, trong kịch bản cụ thể của tôi, điều này dẫn đến trải nghiệm người dùng xấu và tôi không thể thay đổi thành phần chịu trách nhiệm.
/foo/bar/file.txt
. Về cơ bản, tôi chuyển đường dẫn đến nơi tee
giống như được truyền vào dòng lệnh. Điều đó sẽ "chỉ hoạt động" với cả hai đường dẫn tuyệt đối và tương đối, phải không? tee $OUT_FILE
OUT_FILE
tee -- "$OUT_FILE"
ít nhất bạn không cần . Điều gì xảy ra nếu tệp đã tồn tại hoặc tồn tại nhưng không phải là tệp thông thường (thư mục, symlink, fifo)?
tee "${OUT_FILE}.tmp"
. Nếu tệp đã tồn tại, tee
ghi đè, đó là hành vi mong muốn trong trường hợp này. Nếu đó là một thư mục, tee
sẽ thất bại (tôi nghĩ). symlink Tôi không chắc chắn 100%?