Страницы

Поиск по вопросам

суббота, 8 февраля 2020 г.

Как записать результат команды в текстовый файл?

#git #shell


Такой вариант работает, но нет переносов в итоговом файле, все в одну строчку. Как
добавить переносы?   

echo $(git ls-tree -r dev --name-only) > filesUnderGit.txt

    


Ответы

Ответ 1



git ls-tree -r master --name-only > test.txt Как и для любой другой команды, которая пишет в stdout. И как с любой такой командой, можно делать pipe-поезд, если вы хотите как-то ещё обработать выходной поток. git ls-tree -r master --name-only | grep "some/path" | head 42 > test.txt Здесь мы берем только файлы, лежащие в some/path, а потом из них оставляем первые 42.

Ответ 2



данная конструкция: $ echo $(git ...) несколько «перегружена». условно её можно представить как: $ программа $(команда) сначала выполняется команда, заключённая внутри «оболочечного» (от слова shell — оболочка) оператора $(). затем её вывод (не важно, содержит он одну строку или больше) преобразуется в одну строку (символы перевода строки при этом заменяются пробелами) для передачи программе в качестве набора параметров (не опций!). вот потому и выходит «всё одной строкой». в данном конкретном случае избежать такого преобразования можно довольно просто — достаточно убрать echo и оператор $() — за ненадобностью: $ команда но может быть и такая ситуация, что и программа и оператор — нужны, но требуется, чтобы не было «преобразования в одну строку». избежать этого тоже нетрудно — достаточно поставить (двойные) кавычки «на пути» между выполнением оператора $() и формированием строки параметров для программы. примерно так: $ программа "$(команда)"

Комментариев нет:

Отправить комментарий