Кто-то выше разместил:
#!/bin/bash
#function to display commands
exe() { echo "\$ $@" ; "$@" ; }
и это выглядит многообещающе, но я никак не могу понять, что это делает. Я гуглил и искал на странице man bash "\ $" и "$ @", и не нашел абсолютно ничего .
Я понимаю, что создается функция с именем "exec ()". Я понимаю, что фигурные скобки обозначают начало и конец функции. Думаю, я понимаю, что точка с запятой отмечает «жесткий возврат» между многострочными командами, так что '{echo "\ $ $ @"; "$ @"; } 'становится, по сути:
{
echo "\$ $@"
"$@"
}
Может ли кто-нибудь дать мне краткое объяснение или где найти эту информацию, поскольку, очевидно, мое гугл-фу меня подводит?
(Не имея смысла начинать новый вопрос со старого потока, моя цель состоит в том, чтобы перенаправить вывод в файл. Метод "set -x; [команды]; set + x" будет работать для меня достаточно хорошо, но Я не могу понять, как выводить результаты в файл, а не на экран, поэтому я пытался понять этот другой метод в надежде, что смогу использовать очень плохое понимание перенаправления / pipe / tee / etc, чтобы сделать то же самое .)
Спасибо!
ПОСЛЕДНЕЕ РЕДАКТИРОВАНИЕ:
С некоторой переделкой, я думаю, я понял это. Вот мой эквивалентный код для того, что мне нужно:
SCRIPT_LOG="\home\buddy\logfile.txt"
exe () {
params="$@" # Put all of the command-line into "params"
printf "%s\t$params" "$(date)" >> "$SCRIPT_LOG" # Print the command to the log file
$params # Execute the command
}
exe rm -rf /Library/LaunchAgents/offendingfile
exe rm -rf /Library/LaunchAgents/secondoffendingfile
Результаты в файле logfile.txt выглядят примерно так:
Tue Jun 7 16:59:57 CDT 2016 rm -rf /Library/LaunchAgents/offendingfile
Tue Jun 7 16:59:57 CDT 2016 rm -rf /Library/LaunchAgents/secondoffendingfile
Как раз то, что мне было нужно. Спасибо!