2010-02-22 34 views
12

Tôi đang viết kịch bản Perl để tạo tập lệnh Bash. Tôi đang sử dụng open() với chế độ > để xuất mọi thứ sang tệp mới. công cụ tiêu chuẩn:Làm cách nào để tôi có thể đặt quyền đối với tệp từ Perl?

open (FILEOUT, ">", "rename.sh") or die "Can't create rename.sh"; 

Các kết quả .sh tập tin là chỉ đọc, với một giá trị bát phân của 444. Trong perldoc nó nói tôi có thể thêm một + đến > (open (FILEOUT, "+>", "rename.sh")) để làm cho các tập tin mới được tạo ra có thể đọc và ghi, hoặc 666.

Có cách nào để làm cho tệp mới có thể thực thi được (755 hoặc bất kỳ thứ gì khác) bằng cách sử dụng open() không? Nếu không, cách tốt nhất để đặt quyền tệp cho tệp mới là gì?

+0

Đó thực sự không phải là những gì '+>' thực hiện. Nó không có gì với quyền của tập tin và thay vào đó ảnh hưởng đến chế độ truy cập của tập tin được tạo bởi 'mở'. – darch

Trả lời

17

Bạn sẽ muốn chmod tệp như thế này.

chmod 0755, $filename; 
#or 
chmod 0755, $fh; 

Ngoài ra, nếu bạn sử dụng sysopen và thiết lập umask một cách thích hợp, bạn có thể làm mà không chmod.

+0

Tuyệt vời. Cả hai tùy chọn đều hoạt động tốt. Tôi có 'sysopen' để làm việc như vậy:' sử dụng Fcntl; sysopen (FILEOUT, "rename.sh", O_RDWR | O_EXCL | O_CREAT, 0755); ' – Andrew

+1

Và đừng quên' 0' hàng đầu; 'chmod 755, $ filename' tương đương với' chmod 01363 $ filename' –

+0

@Andrew, Nó chỉ hoạt động nếu 'umask' là một tập con của' 022'. – ikegami

1

Đặt + trước mặt < hoặc > cho phép bạn mở tệp ở cả chế độ đọc và ghi.

Trong trường hợp bạn có thể chmod tệp mới được tạo.

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