Bash Echo Командная строка, выполняемая в самой командной строке (не в скрипте)

решение для командной строки:

alsamixer

Master, Master M, наушники и PCM должны быть включены («M» включает / выключает )

2
03.08.2018, 11:31
2 ответа

Вы можете использовать механизм xtrace, при котором оболочка выводит выполняемые команды на стандартный вывод:

(set -x; ls -l) > out-err.dat 2>&1

Измените $PS4с его значения по умолчанию"+ "(в большинстве оболочек )на любое другое, если вам это не нравится (сделайте его пустым, если вы не хотите префикс ).

Как функция:

log_into() ( # args: output-file command args
   exec > "$1" 2>&1
   shift
   PS4='Running: '
   set -o xtrace
   "$@"
)

log_into out-err.dat ls -l
1
27.01.2020, 22:02

Вы можете использовать такую ​​функцию:

echo_command() { printf '%s\n' "${*}"; "${@}"; }

Пример:

$ echo_command echo foo bar baz
echo foo bar baz
foo bar baz
$ echo_command uname
uname
Linux

Как сказал Тим Кеннеди,есть еще очень полезная команда script:

$ script session.log
Script started, file is session.log
$ echo foo
foo
$ echo bar
bar
$ echo baz
baz
$ exit
exit
Script done, file is session.log
$ cat session.log
Script started on 2018-07-31 16:30:31-0500
$ echo foo
foo
$ echo bar
bar
$ echo baz
baz
$ exit
exit

Script done on 2018-07-31 16:30:43-0500

Обновление

Если вам также необходимо регистрировать перенаправления и в основном каждый синтаксис оболочки (, обратите внимание, что я добавил небольшое Command line:сообщение, чтобы легко идентифицировать выполняемую команду):

echo_command() {
  local arg
  for arg; do
    printf 'Command line: %s\n' "${arg}"
    eval "${arg}"
  done
}

Только учтите, что нужно быть очень осторожным с цитированием, так как используется eval:

$ echo_command 'echo foo > "file 2"; cat "file 2"'
Command line: echo foo > "file 2"; cat "file 2"
foo

Он также принимает несколько команд одновременно вместо одной:

$ echo_command 'echo foo' 'echo bar' 'echo baz'
Command line: echo foo
foo
Command line: echo bar
bar
Command line: echo baz
baz
3
27.01.2020, 22:02

Теги

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