Как понять распечатку трассировки команды `set -x`?

No hay ningún caso en el que needreinstale cualquier Linux a menos que esté pirateado y la seguridad esté comprometida, tenga en cuenta que esto solo se aplica a las máquinas servidor donde la seguridad es muy importante. A veces es más rápido y más fácil reinstalar Linux en lugar de revivir un sistema dañado. La necesidad de reinstalar se basa puramente en sus habilidades de Linux, con qué frecuencia rompe su sistema, pegando comandos cuyo significado no conoce. Puede tener Linux y Windows en la misma máquina, no se infectará Linux con virus de sus ventanas. No reinstalé mi arco durante 4 años, usándolo a diario.

-3
08.08.2017, 21:51
2 ответа

Кажется, что трассировка предпочитает использовать сильные кавычки, когда это вообще возможно. Если бы мне пришлось угадывать, это было бы для легко воспроизводимых результатов, не зависящих от изменений переменных среды оболочки, как в этом случае:

$ echo '$var'   
+ echo '$var'
$var

Сильные кавычки, по-видимому, также допускают «более простое» (т.е. е. не -экранированные )репродукции, как в:

$ echo \\          # why is the trace print out not: echo \\
+ echo '\'
\

Однако при воспроизведении 's, поскольку он выбирает сильные кавычки, он должен их экранировать. Я предполагаю, что это будет более простой логикой, чем рассмотрение вопроса о том, следует ли использовать слабые или сильные кавычки, что потенциально может привести к беспорядку при проверке регистра -.

1
28.01.2020, 05:18

Цитирование руководства:

after they are expanded and before they are executed

Вы утверждаете:

But I found that the traces it prints out are not exactly the results after expansion but before execution

Но они есть. Результатом раскрытия является список слов . Bash использует кавычки для однозначного представления списка слов. То, что печатает bash, не является промежуточным результатом расширения, когда удаление кавычек не выполнялось. Это печатное представление списка строк.

Например, если трассировка была

+ cp foo bar qux

, тогда невозможно было бы узнать, была ли команда cpс тремя аргументами foo, barи quxили с двумя аргументами foo barи qux(, например. потому что исходная команда былаcp "foo bar" qux)или с двумя аргументами fooи bar qux, или если на самом деле это была команда с именем cp foo bar quxи т. д. Чтобы сделать трассировку однозначной, bash использует кавычки. Кавычки выбраны таким образом, чтобы трассировка была одним из возможных способов запуска этой команды в bash-скрипте.

Например, трассировка + echo '$var'означает, что команда echoвыполняется с одним аргументом, строкой из 4 -символов $var. Есть много способов запустить эту команду, например:

echo '$var'
echo \$var
echo \$\v\a\r
echo "\$v"\a''''r
echo "$a"               # after running a='$var'
3
28.01.2020, 05:18

Теги

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