Вообще, мне интересно, как я могу передать аргументы из терминальной команды в стандартный вывод. Более конкретно, я использую tar как часть моего процесса резервного копирования, и я хотел бы, чтобы параметры (особенно исключенные каталоги) были переданы в файл журнала. Для исключенных dirs я попробовал tar --show-omitted-dirs , но это не сработало, как я думал.

Я новичок в работе со скриптами bash, но я прочитал о "$ @" и решил, что могу написать свою собственную функцию

myLS() { echo "$@"; ls "$@"; }

сначала вывести команды на стандартный вывод, а затем передать их ls . echo труб

myLS() { echo "$@" | tr " " "\n"; ls "$@"; }

или используя printf

myLS() { printf '%s\n' "$@"; ls "$@"; }

разделяет эти аргументы на новые строки, что я и хотел бы получить поверх файла журнала.

Хотя это работает, мне любопытно, есть ли предпочтительный способ сделать это, который не требует, чтобы я переписывал свою собственную функцию каждый раз, когда я хочу вести журнал аргументов, которые я использовал при выполнении команды. Как общее решение, так и решения, специфичные для tar , полезны.

1 ответ1

0

На самом деле нет предпочтительного способа сделать это. Лучший способ, который я могу придумать, и метод, который я использую, это именно то, что вы сделали. Создайте функцию, которая сначала печатает параметры, а затем запускает команду с этими параметрами. Единственное улучшение, которое я могу сделать, - вместо использования разных функций для каждой команды, вы можете написать одну функцию, такую как:

#!/bin/bash
function show_args {
    echo "$@" | tr " " "\n" >> logfile
    $@
}

Эта функция может быть вызвана как:

show_args ls -ah ~/documents/

Он отобразит аргументы, расположенные друг над другом, в "logfile", а затем запустит команду.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .