2011-01-13 48 views
127
echo "text" >> 'Users/Name/Desktop/TheAccount.txt' 

Làm cách nào để tạo tệp nếu nó không tồn tại nhưng ghi đè lên nếu nó đã tồn tại. Ngay bây giờ kịch bản này chỉ nối thêm.Ghi vào tệp, nhưng ghi đè lên nếu nó tồn tại

+0

well..này thật tuyệt vời. Tôi đã thừa nhận> sớm hơn một chút >>. – Jokester

Trả lời

242

Một chút hiểu biết về cách hoạt động của ống * nix.

Tóm tắt >> nhà điều hành chuyển hướng sẽ nối thêm dòng vào cuối tệp được chỉ định, trong đó-vì đơn lớn hơn > sẽ trống và ghi đè lên tệp.

echo "text" > 'Users/Name/Desktop/TheAccount.txt' 
+2

Một số môi trường không cho phép với một cái gì đó như '-bash: TheAccount.txt: không thể ghi đè lên tệp hiện có'. –

+7

Ngoài ra, '>' và '>>' là các toán tử * chuyển hướng đầu ra *. Toán tử đường ống là '|'. –

+0

Xem câu trả lời của @BrDaHa.Sử dụng '> |' để bắt buộc ghi đè hiện tại – Jake

27

Mặc dù NylonSmile's answer, đó là "loại" đúng .. Tôi đã không thể ghi đè lên file, theo cách này ..

echo "i know about Pipes, girlfriend" > thatAnswer

zsh: file exists: thatAnswer

để giải quyết vấn đề của tôi .. Tôi đã phải sử dụng ... >!, á la ..

[[ $FORCE_IT == 'YES' ]] && echo "[email protected]" >! "$X" || echo "[email protected]" > "$X" 

Rõ ràng, hãy cẩn thận với điều này ...

+22

Điều này có nghĩa là bạn có tùy chọn zsh không mặc định 'NOCLOBBER' được đặt. Sử dụng 'setopt clobber' để khôi phục hành vi mặc định. –

2
#!/bin/bash 

cat <<EOF > SampleFile 

Put Some text here 
Put some text here 
Put some text here 

EOF 
1

Nếu bạn có đầu ra có thể có sai sót, bạn có thể muốn sử dụng một dấu lớn hơn, như sau:

my_task &> 'Users/Name/Desktop/task_output.log' điều này sẽ chuyển hướng cả stderr và stdout vào tệp nhật ký (thay vì chỉ là giá trị mặc định).

+4

Điều đó có thể đúng, nhưng không liên quan đến câu hỏi. – Deiwin

34

Trong Bash, nếu bạn đã thiết lập noclobber a la set -o noclobber, sau đó bạn sử dụng cú pháp >|

Ví dụ:

echo "some text" >| existing_file

này cũng hoạt động nếu tập tin không tồn tại được nêu


  • Kiểm tra nếu noclobber được thiết lập với: set -o | grep noclobber

  • Đối với một lời giải thích chi tiết hơn về loại đặc biệt này của nhà điều hành, xem this post

  • Đối với một danh sách đầy đủ hơn của các nhà khai thác chuyển hướng, hãy tham khảo this post

+0

Cảm ơn, hoạt động cho zsh quá. –

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