Недавно я повторяю короткие предложения в tree_hole
файл.
Я использовал, echo 'something' >> tree_hole
чтобы сделать эту работу.
Но я всегда беспокоился о том, что если я неправильно введу >
вместо >>
, так как я делал это часто.
Поэтому я создал собственный глобальный функционал bash в bashrc:
function th { echo "$1" >> /Users/zen1/zen/pythonstudy/tree_hole; }
export -f th
Но мне интересно, есть ли еще один простой способ добавить строки в конец файла. Потому что мне может понадобиться использовать это часто в других случаях.
Есть ли?
rm="rm -i"
и в другой среде написали вrm *
ожидании подтверждения вопросов. Вы учитесь опасным привычкам!Ответы:
Установите параметр оболочки
noclobber
:источник
>|
.zsh
включает это поведение по умолчанию.setopt noclobber
иsetopt clobber
. Похоже, это не совсем «по умолчанию», это зависит от файлов конфигурации, которые поставляются с вашим дистрибутивом.set [+-]C
для любой современной оболочкиset +o noclobber
в Баш илиset +C
.Если вы обеспокоены тем, что ваш файл будет поврежден
>
оператором, вы можете изменить атрибут файла только для добавления:в ext2 / ext3 / ext4 файловой системе :
chattr +a file.txt
В файловой системе XFS :
echo chattr +a | xfs_io file.txt
И если вы хотите функцию, я уже сделал функцию для себя (я использовал ее в служебном файле для регистрации результатов), вы можете изменить ее для своей цели:
источник
$
), чтобы предотвратить сбои, разбиение слов и связанные с ними проблемы с пробелами. Онлайн- приложение ShellCheck может решить эту и другие проблемы в скриптах bash. На соответствующую записку"$@"
это гораздо безопаснее , чем$*
.read
команду с-r
опцией, чтобы предотвратить обратную косую черту во входных данных от следующего символа. 3) В сценариях bash обычно используют строчные буквы для имен переменных сценария, поскольку ALL UPPER CASE используется для системных переменных. Поэтому, если вы используете верхний регистр для своих собственных переменных, вы будете путать людей, которые читают ваш код, и вы можете случайно забить системную переменную, которую вы хотите использовать позже в сценарии. И если вы создадите сценарий, он преобразует переменные для последующих команд.echo
удобен для печати фиксированных строк, но может делать неожиданные вещи с произвольными данными, особенно в системах GNU. Это гораздо безопаснее в использованииprintf
. См. Unix.stackexchange.com/questions/65803/… для получения дополнительной информации, особенно ответа Стефана Шазеласа.Используйте
tee
с опцией добавления:источник
>
персонажа, то они могут беспокоиться о том, чтобы забыть о-a
опции!многие программы, которые могут открывать файлы для перезаписи, могут альтернативно открывать их для добавления, например, gnu dd.
он может читать stdin или файл с именем в
if=
параметре add2>/dev/null
для подавления подсчета байтов.источник
dd
это плохая идея.dd
не надежно записывает свои входные данные в свои выходные , даже если один из них не является обычным файловым или блочным устройствомЯ хотел бы использовать
sed
(даже с резервной копией - смотрите расширение после-i
):источник
Вы всегда можете искать через файл другими способами ...
... эта странно выглядящая последовательность печатает:
Но это глупо.
Более полезный пример может выглядеть так:
Вы можете назвать это как:
И вы получите число
file
строк, записанныхstderr
непосредственно перед началом действия добавления.источник