Один из возможных приемов, хотя он будет работать только для простых команд (например, без каналов или перенаправления (a) ), заключается в использовании префиксной переменной, например:
pax> cat qq.sh
${PAXPREFIX} ls /tmp
${PAXPREFIX} printf "%05d\n" 72
${PAXPREFIX} echo 3
Чтодля этого вам нужно вставить определенную переменную (в данном случае PAXPREFIX
) перед командами.Если переменная пуста, она не повлияет на команду, как показано ниже:
pax> ./qq.sh
my_porn.gz copy_of_the_internet.gz
00072
3
Однако, если она установлена на echo
, каждая строка будет иметь префикс этой строки echo
.
pax> PAXPREFIX=echo ./qq.sh
ls /tmp
printf %05d\n 72
echo 3
(a) Причину, по которой это будет работать только для простых команд, можно увидеть, если у вас есть что-то вроде:
${PAXPREFIX} ls -1 | tr '[a-z]' '[A-Z]'
Когда PAXPREFIX
пуст, он просто даст вам список ваших имен файлов в верхнем регистре.Если установлено значение echo
, это приведет к:
echo ls -1 | tr '[a-z]' '[A-Z]'
, что даст:
LS -1
(не совсем то, что вы ожидаете).
InФактически, вы можете увидеть проблему даже в простом случае, описанном выше, где %05d\n
больше не заключен в кавычки.
Если вы хотите более надежное решение, я бы выбрал:
if [[ ${PAXDEBUG:-0} -eq 1 ]] ; then
echo /usr/bin/curl -c $PROXY --certkey $CERT --header ...
else
/usr/bin/curl -c $PROXY --certkey $CERT --header ...
fi
и используйте PAXDEBUG=1 myscript.sh
для запуска в режиме отладки.Это похоже на то, что у вас есть сейчас, но с тем преимуществом, что вам не нужно редактировать файл для переключения между обычным и отладочным режимами.
Для отладки вывода из самой оболочки вы можете запуститьс помощью bash -x
или вставьте set -x
в ваш скрипт, чтобы включить его в определенный момент (и, конечно, выключите его с помощью set +x
).