Відповіді:
Трохи розуміння того, як працюють * нікс-труби, допоможе.
Коротше кажучи, >>оператор перенаправлення додасть рядки до кінця зазначеного файлу, де - як сингл більше, ніж >буде порожнім і перезапише файл.
echo "text" > 'Users/Name/Desktop/TheAccount.txt'
-bash: TheAccount.txt: cannot overwrite existing file.
>і >>є вихідним перенаправлення операторів. Оператор труби є |.
>|для примусового перезапису існуючого
Якщо в Bash ви встановили noclobber a la set -o noclobber, тоді ви використовуєте синтаксис>|
Наприклад:
echo "some text" >| existing_file
Це також працює, якщо файл ще не існує
Перевірте, чи встановлено noclobber за допомогою: set -o | grep noclobber
Більш детальне пояснення щодо цього спеціального типу оператора див. У цій публікації
Більш вичерпний список операторів перенаправлення див. У цій публікації
&>| fileпрацює. Яку оболонку та версію ви використовуєте? @stimulate для zsh обидва повинні працювати , для bash це тільки>|
echo "aaa" &>| test.txtпризводить до помилки -bash: syntax error near unexpected token |. Мій noclobber увімкнено.
echo "aaa" >| test.txt 2>&1або використовувати іншу оболонку.
Незважаючи NylonSmileна відповідь ' , яка є "своєрідною" правильною. Я не зміг перезаписати файли таким чином ..
echo "i know about Pipes, girlfriend" > thatAnswer
zsh: file exists: thatAnswer
щоб вирішити свої питання .. Мені довелося використовувати ... >!, ла ..
[[ $FORCE_IT == 'YES' ]] && echo "$@" >! "$X" || echo "$@" > "$X"
Очевидно, будьте обережні з цим ...
NOCLOBBER. Використовуйте setopt clobber для відновлення поведінки за замовчуванням.
Якщо ваше середовище не дозволяє перезаписати >, використовуйте pipe |та teeзамість цього:
echo "text" | tee 'Users/Name/Desktop/TheAccount.txt'
Зверніть увагу, це також буде надруковано у stdout. У випадку, якщо це небажано, ви можете перенаправити висновок /dev/nullтаким чином:
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
Тільки зазначивши, що якщо ви хочете перенаправити як std :: cerr, так і std :: cout у файл, поки у вас не встановлено noclobber (тобто set -o noclobber), ви можете використовувати код:
cmd >|file.txt 2>&1
Більше інформації про це можна переглянути на веб- сайті https://stackoverflow.com/a/876242 .
Також відповідь на питання @ TuBui щодо відповіді @BrDaHa подано вище 9 серпня 188 о 9:34.
Щоб перезаписати вміст одного файлу в інший файл. використовувати кішку, наприклад.
echo "this is foo" > foobar.txt
cat foobar.txt
echo "this is bar" > bar.txt
cat bar.txt
Тепер, щоб замінити foobar, ми можемо використовувати команду cat, як показано нижче
cat bar.txt >> foobar.txt
cat foobar.txt
>>додавання, не перезапис
Якщо у вас є вихід, який може мати помилки, ви можете використовувати амперсанд і більше, ніж наступне:
my_task &> 'Users/Name/Desktop/task_output.log' це перенаправить і stderr, і stdout у файл журналу (замість лише stdout).