2011-07-20 33 views
12

Trong chuyển hướng bash thông thường > chuyển hướng đầu ra tiêu chuẩn sang tệp, ghi đè khi nó tồn tại và >> chuyển hướng đầu ra tiêu chuẩn sang tệp, thêm vào khi nó tồn tại.Làm gì>! và >>! làm trong tcsh

Trong tập lệnh tcsh (c shell) Tôi thấy các toán tử >!>>! đang được sử dụng. Các nhà khai thác này làm gì? tcsh cũng có các toán tử >>>, vậy sự khác biệt là gì?

Trả lời

28

Trong chuyển hướng tcsh! biểu tượng nghĩa là ghi đè tệp hiện có ngay cả khi noclobber được đặt.

Nói cách khác, nếu noclobber được thiết lập sau đó:

  • cmd > file sẽ viết stdout-tập tin nếu tập tin không tồn tại
  • cmd > file sẽ thất bại nếu tập tin tồn tại
  • cmd >> file sẽ thêm stdout vào tệp nếu tập tin tồn tại
  • cmd >> file sẽ thất bại nếu tập tin không tồn tại
  • cmd >! file sẽ viết stdout-tập tin, ghi đè lên bất kỳ tập tin hiện có
  • cmd >>! file sẽ nối stdout-tập tin, tạo ra các tập tin nếu nó chưa tồn tại

Nếu noclobberkhông đặt sau đó là! không có tác dụng:

  • cmd > file sẽ viết stdout-tập tin, ghi đè lên bất kỳ tập tin hiện có
  • cmd >> file sẽ nối stdout-tập tin
  • cmd >! file sẽ viết stdout-tập tin, ghi đè lên bất kỳ tập tin hiện có
  • cmd >>! file sẽ nối thêm stdout đến tệp
+1

Lưu ý rằng bash có thứ gì đó tương tự. Nó có tùy chọn "noclobber" của riêng nó (thường không được đặt) và sử dụng "> |" và ">> |" để ghi đè lên nó. –

3

Dấu chấm than ngăn chặn việc kiểm tra loại tệp được ghi vào một số trường hợp nhất định.

Để trích dẫn trang tcsh người đàn ông:

Nếu biến vỏ noclobber được thiết lập, sau đó các tập tin không tồn tại hoặc là một nhân vật tập tin đặc biệt (ví dụ, một thiết bị đầu cuối hoặc '/ dev/null') hoặc một kết quả lỗi. Điều này giúp ngăn ngừa tình cờ phá hủy các tập tin. Trong trường hợp này, các biểu mẫu ‘!’ Có thể được sử dụng để chặn kiểm tra này.

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