Как добавить дату и текст в файл в качестве псевдонима?

Я хочу создать псевдоним для добавления заметки с датой в файл. (Пример использования, который я хочу воспроизвести: Себастьян Дашнер - Как делать эффективные заметки в качестве разработчика.

Пока что я смог добавить дату, но я не могу найти способ добавить и дату, и заметку из пользовательского ввода.

Использование

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) :)'
2
задан 31 August 2021 в 14:31

2 ответа

. Это можно сделать с помощью небольшого скрипта. Один из способов:

#!/bin/bash
echo "$(date -I) : $@" >> file.txt
tail -n 1 file.txt

Переменная $ @ обозначает все, что вы ввели в командной строке. Команда tail выводит на экран последнюю строку файла.

Сохраните этот сценарий в папке ~ / bin или в каталоге .local / bin как , добавляемый к файлу . Создайте каталог, если он не существует. В следующий раз, когда вы войдете в систему, любой из этих каталогов будет включен в ваш PATH. Затем вы можете ввести команду в любое время. То, что вы введете, будет сохранено в файле file.txt в текущем рабочем каталоге.

3
ответ дан 4 September 2021 в 09:24

Если вам нужно что-то, что вы можете передать текстовое сообщение в качестве аргумента, вам следует искать функцию оболочки, а не псевдоним.

Вы можете рассмотреть возможность использования утилиты 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

4
ответ дан 4 September 2021 в 09:24

Другие вопросы по тегам:

Похожие вопросы: