Подтвердить что ты не робот

Echo некоторые командные строки в оболочке script (echo on для одной команды)

В сценариях оболочки я хотел бы повторить некоторые из основных (длинных) команд для определения статуса и отладки. Я знаю, что могу включить эхо для всех команд с set -x или set -v. Но я не хочу видеть все команды (особенно не команды эха). Есть ли способ включить эхо только для одной команды?

Я мог бы сделать так, но это уродливое и повторяет линию set +x:

#!/bin/sh

dir=/tmp
echo List $dir

set -x
ls $dir
set +x

echo Done!

Есть ли лучший способ сделать это?

4b9b3361

Ответ 1

Стоимость процесса за раз, вы можете использовать:

(set -x; ls $dir)

Выполняет команду в под-оболочке, поэтому set -x влияет только на то, что находится внутри круглых скобок. Вам не нужно вводить код или видеть set +x. Я использую это, когда мне нужно делать выборочную трассировку.

Ответ 3

На основании ответа Джонатана Леффлера это работает точно так же, немного более ясно, потому что после команды нужно отметить. Но вам нужно указать, какую оболочку следует использовать. Это пример для sh:

sh -xc ls $dir

Ответ 4

Легкий способ сделать это с помощью heredoc и неинтерпретируемой строки. Это POSIX портативный и быстрый:

...
% cmd='ls ${dir}'
% sh -x <<_EOF_
> ${cmd}
> _EOF_
...

Вы можете создавать целые сценарии таким образом, анализируя и/или изменяя их программно по мере необходимости, сохраняя их и вызывая их из переменных оболочки и запуская их все изнутри другой функции script или оболочки:

...
% script="$(cat </some/entire/script.sh)"
% script="$(pipeline | processing | on | ${script})"    
% sh -x <<_EOF_ 2>&1 | grep ${specific_cmds_Im_looking_for}
> ${script}
> _EOF_
<desired output>

В моем ответе POSIX-совместимый способ увидеть, определена ли функция в sh script. Я описываю хау и все это более подробно. И в Stack Exchange я довольно подробно обсужу, как heredoc можно использовать для решения некоторых раздражающих проблем цитирования в ответ на Есть ли способ получить фактические (неинтерпретированные) аргументы оболочки в функции или script?.

-Mike