Я хочу создать псевдоним для добавления заметки с датой в файл. (Пример использования, который я хочу воспроизвести: Себастьян Дашнер - Как делать эффективные заметки в качестве разработчика.
Пока что я смог добавить дату, но я не могу найти способ добавить и дату, и заметку из пользовательского ввода.
Использование
append-to-file 'my text'
Ожидаемый результат в file.txt
2021-08-30 : some previous text
2021-09-01 : my text
Псевдоним, который я написал до сих пор
alias append-to-file='tee -a file.txt <<< $(echo $(date -I) :)'
. Это можно сделать с помощью небольшого скрипта. Один из способов:
#!/bin/bash
echo "$(date -I) : $@" >> file.txt
tail -n 1 file.txt
Переменная $ @
обозначает все, что вы ввели в командной строке. Команда tail
выводит на экран последнюю строку файла.
Сохраните этот сценарий в папке ~ / bin
или в каталоге .local / bin
как , добавляемый к файлу
. Создайте каталог, если он не существует. В следующий раз, когда вы войдете в систему, любой из этих каталогов будет включен в ваш PATH. Затем вы можете ввести команду в любое время. То, что вы введете, будет сохранено в файле file.txt
в текущем рабочем каталоге.
Если вам нужно что-то, что вы можете передать текстовое сообщение в качестве аргумента, вам следует искать функцию оболочки, а не псевдоним.
Вы можете рассмотреть возможность использования утилиты ts (timestamp) из пакета moreutils:
append-to-file () { printf '%s\n' "$*" | ts '%Y-%m-%d :' >> /path/to/myfile.txt ; }
Если ts
не подходит, вы можете вставить текст в строку формата date
, но вы должны быть осторожны с символами %
:
append-to-file () { msg="$*"; date "+%Y-%m-%d : ${msg//%/%%}" >> /path/to/myfile.txt ; }
или ( благодаря @ bac0n ), возможно, безопаснее, используйте bash printf
собственные возможности форматирования времени - нет необходимости заменять %
s в этом методе, поскольку сообщение передается как строковый аргумент, а не внедряется в строку формата:
append-to-file () { printf '%(%Y-%m-%d)T : %s\n' -1 "$*" >> /path/to/myfile.txt ; }
Если если вы хотите, чтобы он также передавался на терминал, замените >>
на | tee -a