Записать в файл, но перезаписать, если он существует - PullRequest
204 голосов
/ 13 января 2011
echo "text" >> 'Users/Name/Desktop/TheAccount.txt'

Как сделать так, чтобы он создавал файл, если он не существует, но перезаписывал его, если он уже существует.Сейчас этот скрипт просто добавляется.

Ответы [ 7 ]

353 голосов
/ 13 января 2011

Небольшое понимание того, как работает * nix pipe, помогло бы.

Короче говоря, оператор перенаправления >> добавит строки в конец указанного файла, где-как единичное число больше >очистит и перезапишет файл.

echo "text" > 'Users/Name/Desktop/TheAccount.txt'
68 голосов
/ 24 февраля 2016

В Bash, если вы установили noclobber а-ля set -o noclobber, вы используете синтаксис >|

Например:

echo "some text" >| existing_file

Это также работает, если файл еще не существует


  • Проверьте, установлен ли noclobber с помощью: set -o | grep noclobber

  • Более подробное объяснение этого специального типа оператора см. в этом посте

  • Более полный список операторов перенаправления см. В этом посте

38 голосов
/ 11 мая 2014

Несмотря на ответ NylonSmile , что является "своего рода" правильным .. Мне не удалось перезаписать файлов, таким образом ..

echo "i know about Pipes, girlfriend" > thatAnswer

zsh: file exists: thatAnswer

, чтобы решить мои проблемы ... Мне пришлось использовать ... >!, а .

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

Очевидно, будьте осторожны с этим ...

7 голосов
/ 15 августа 2018

Если ваша среда не позволяет перезаписывать с помощью >, вместо этого используйте трубы | и tee следующим образом:

echo "text" | tee 'Users/Name/Desktop/TheAccount.txt'

Обратите внимание, что это также будет печатать на стандартный вывод.Если это нежелательно, вы можете перенаправить вывод на /dev/null следующим образом:

echo "text" | tee 'Users/Name/Desktop/TheAccount.txt' > /dev/null
3 голосов
/ 05 декабря 2014
#!/bin/bash

cat <<EOF > SampleFile

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

EOF
1 голос
/ 14 мая 2019

Просто отметив, что если вы хотите перенаправить как std :: cerr, так и std :: cout в файл, когда у вас установлен noclobber (то есть set -o noclobber), вы можете использовать код:

    cmd >|file.txt 2>&1

Более подробную информацию об этом можно увидеть по адресу https://stackoverflow.com/a/876242.

Также вопрос @ TuBui об этом ответе на ответ @BrDaHa предоставил выше в 9-18 августа в 9: 34.

0 голосов
/ 21 декабря 2015

Если у вас есть выходные данные, которые могут иметь ошибки, вы можете использовать амперсанд и больше, чем указано ниже:

my_task &> 'Users/Name/Desktop/task_output.log' это перенаправит как stderr, так и stdout нафайл журнала (вместо только stdout).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...