конкатенация с предыдущей строкой в ​​bash

Что касается значения каталога /bin, процитируем источник страницы руководства intro(0) из моментального снимка Unix Research V3. доступен на github и в других местах:

Commands generally reside in directory /bin____ (for
bin___ary programs).

Этот же текст появляется в The Unix Programmer's Manual (неявно первое издание), в Introduction , от 1971 года.

Насколько Я могу сказать, что в ранней Unix не было пользовательских команд, представленных в виде сценариев, и только в V6 два сценария впервые появились в /usr/bin, к тому времени соглашение о поиске /bin ] и /usr/bin для команд были очень хорошо установлены, и поэтому это было бы естественным местом для их размещения — никогда не было необходимости отделять их от «двоичных файлов», и до сих пор нет .

0
29.08.2017, 23:51
1 ответ
push () { date "+%F/push/$1" >> /tmp/pushlog.txt; }

Это определяет функцию оболочки, которая добавляет строку в файл /tmp/pushlog.txt.

Строка формата, используемая с date, включает первый аргумент командной строки функции оболочки.

bash-4.4$ push 123
bash-4.4$ push "hello world"
bash-4.4$ push "%s"
bash-4.4$
bash-4.4$ cat /tmp/pushlog.txt
2017-08-29/push/123
2017-08-29/push/hello world
2017-08-29/push/1504041277

Если вы планируете использовать pushдля передачи строк, которые могут быть интерпретированы date(, как в последнем примере ), и если это не то, что вам нужно, используйте вместо этого:

push () { printf '%s/push/%s\n' "$(date '+%F')" "$1" >> /tmp/pushlog.txt; }

Причина, по которой вы получаете нежелательную новую строку в вашем файле, заключается в том, что dateвыводит новую строку в конце своего вывода. Эта новая строка удаляется при использовании dateв $(...), как я сделал во второй реализации моей функции оболочки выше.

3
28.01.2020, 02:24

Теги

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