echo "text" >> 'Users/Name/Desktop/TheAccount.txt'
Как сделать так, чтобы он создавал файл, если он не существует, но перезаписывает его, если он уже существует. Прямо сейчас этот script просто добавляет.
echo "text" >> 'Users/Name/Desktop/TheAccount.txt'
Как сделать так, чтобы он создавал файл, если он не существует, но перезаписывает его, если он уже существует. Прямо сейчас этот script просто добавляет.
Небольшое понимание того, как работают трубы nix, поможет.
Короче говоря, оператор перенаправления >>
будет добавлять строки к концу указанного файла, где - как только сингл больше >
будет пустым и перезапишет файл.
echo "text" > 'Users/Name/Desktop/TheAccount.txt'
В Bash, если вы установили noclobber a la set -o noclobber
, тогда вы используете синтаксис >|
Например:
echo "some text" >| existing_file
Это также работает, если файл еще не существует
Несмотря на 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"
Очевидно, будьте осторожны с этим...
Если ваша среда не позволяет перезаписывать с помощью >
, используйте pipe |
и вместо этого tee
:
echo "text" | tee 'Users/Name/Desktop/TheAccount.txt'
Обратите внимание, что это также будет печатать на стандартный вывод. В случае, если это нежелательно, вы можете перенаправить вывод в /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
Более подробную информацию об этом можно увидеть по адресу fooobar.com/questions/898/....
Также этот ответ @TuBui на вопрос об ответе @BrDaHa, представленный выше в 9 августа 18 августа в 9:34.
Если у вас есть вывод, который может иметь ошибки, вы можете использовать амперсанд и a больше, чем, например:
my_task &> 'Users/Name/Desktop/task_output.log'
это перенаправит как stderr, так и stdout в файл журнала (вместо только stdout).