Пишите в файл, но перезаписывайте его, если он существует.
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).