решение для командной строки:
alsamixer
Master, Master M, наушники и PCM должны быть включены («M» включает / выключает )
Вы можете использовать механизм 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
Вы можете использовать такую функцию:
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