Пишите в файл, но перезаписывайте его, если он существует.

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

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

Ответ 1

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

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

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

Ответ 2

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

Например:

echo "some text" >| existing_file

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


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

  • Подробнее об этом специальном типе оператора см. этот пост

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

Ответ 3

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

echo "i know about Pipes, girlfriend" > thatAnswer

zsh: file exists: thatAnswer

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

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

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

Ответ 4

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

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

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

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

Ответ 5

#!/bin/bash

cat <<EOF > SampleFile

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

EOF

Ответ 6

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

    cmd >|file.txt 2>&1

Более подробную информацию об этом можно увидеть по адресу fooobar.com/questions/898/....

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

Ответ 7

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

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