Câu trả lời:
Một chút hiểu biết về cách làm việc * ống nix sẽ giúp.
Nói tóm lại, >>
toán tử chuyển hướng sẽ nối các dòng vào cuối tệp được chỉ định, trong đó, khi đơn lẻ lớn hơn >
sẽ trống và ghi đè lên tệp.
echo "text" > 'Users/Name/Desktop/TheAccount.txt'
-bash: TheAccount.txt: cannot overwrite existing file
.
>
và >>
là các toán tử chuyển hướng đầu ra . Người vận hành đường ống là |
.
>|
để buộc ghi đè lên hiện tại
Trong Bash, nếu bạn đã đặt noclobber a la set -o noclobber
, thì bạn sử dụng cú pháp>|
Ví dụ:
echo "some text" >| existing_file
Điều này cũng hoạt động nếu tập tin chưa tồn tại
Kiểm tra xem noclobber có được đặt với: set -o | grep noclobber
Để được giải thích chi tiết hơn về loại toán tử đặc biệt này, hãy xem bài đăng này
Để biết danh sách đầy đủ hơn các toán tử chuyển hướng, hãy tham khảo bài viết này
&>| file
không hoạt động. Bạn đang sử dụng shell và phiên bản nào? @stimulation cho zsh cả hai nên hoạt động , vì bash nó chỉ>|
echo "aaa" &>| test.txt
kết quả do lỗi -bash: syntax error near unexpected token |
. Noclobber của tôi được đặt trên.
echo "aaa" >| test.txt 2>&1
hoặc sử dụng vỏ khác.
Mặc dù NylonSmile
câu trả lời là "loại" chính xác .. Tôi không thể ghi đè lên các tệp, theo cách này ..
echo "i know about Pipes, girlfriend" > thatAnswer
zsh: file exists: thatAnswer
để giải quyết vấn đề của mình .. tôi đã phải sử dụng ... >!
, á la ..
[[ $FORCE_IT == 'YES' ]] && echo "$@" >! "$X" || echo "$@" > "$X"
Rõ ràng, hãy cẩn thận với điều này ...
NOCLOBBER
. Sử dụng setopt clobber
để khôi phục hành vi mặc định.
Nếu môi trường của bạn không cho phép ghi đè bằng >
, hãy sử dụng đường ống |
và tee
thay vào đó như sau:
echo "text" | tee 'Users/Name/Desktop/TheAccount.txt'
Lưu ý điều này cũng sẽ in ra thiết bị xuất chuẩn. Trong trường hợp điều này là không mong muốn, bạn có thể chuyển hướng đầu ra /dev/null
như sau:
echo "text" | tee 'Users/Name/Desktop/TheAccount.txt' > /dev/null
#!/bin/bash
cat <<EOF > SampleFile
Put Some text here
Put some text here
Put some text here
EOF
Chỉ cần lưu ý rằng nếu bạn muốn chuyển hướng cả std :: cerr và std :: cout sang một tệp trong khi bạn đã đặt noclobber (tức là set -o noclobber
), bạn có thể sử dụng mã:
cmd >|file.txt 2>&1
Thông tin thêm về điều này có thể được xem tại https://stackoverflow.com/a/876242 .
Ngoài ra câu trả lời của câu hỏi @ TuBui về câu trả lời @BrDaHa được cung cấp ở trên vào ngày 9 tháng 8 năm 18 lúc 9:34.
Để ghi đè nội dung của tệp này sang tệp khác. sử dụng mèo, vd.
echo "this is foo" > foobar.txt
cat foobar.txt
echo "this is bar" > bar.txt
cat bar.txt
Bây giờ để ghi đè lên foobar, chúng ta có thể sử dụng lệnh cat như dưới đây
cat bar.txt >> foobar.txt
cat foobar.txt
>>
là phần bổ sung, không ghi đè
Nếu bạn có đầu ra có thể có lỗi, bạn có thể muốn sử dụng ký hiệu và 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 sang tệp nhật ký (thay vì chỉ xuất ra).