varname='*'
Хотя вы должны быть осторожны с тем, где вы его используете; поскольку globbing происходит после расширения переменной, если вы расширите ее небрежно, она будет выполнять операцию glob во время расширения вместо этого. Используйте echo "$varname"
для печати (обратите внимание на кавычки).
Используйте команду trap
в bash.
trap [-lp] [[arg] sigspec...]
If a sigspec is DEBUG, the command arg is executed before every simple command...
Теперь ваша единственная проблема заключается в том, что ваша команда trap запускается до, а не после команды. Но вы можете передать команду для выполнения с помощью $BASH_COMMAND
, и вы можете заставить команду не выполняться.
extdebug
- If the command run by the DEBUG trap returns a non-zero value, the next command is skipped and not executed.
Поэтому установите ловушку DEBUG, если вы обнаружите интересующую вас команду, выполните $BASH_COMMAND
, выполните свою собственную команду, а затем запретите запуск исходной команды.
Редактировать
Попробуйте этот пример:
#!/bin/bash
function myfunc ()
{
if test "$BASH_COMMAND" = "echo 1"; then
$BASH_COMMAND
echo "runing after 'echo 1'"
return 1
else
return 0
fi
}
shopt -s extdebug
trap "myfunc" DEBUG
echo 1
echo 2
Выполнение этого скрипта:
$ bash test.sh
1
runing after 'echo 1'
2