|
|||||||
Как в сложных вложенных командах bash понять, кому принадлежат аргументы
Время создания: 17.05.2022 15:59
Автор: xintrea
Текстовые метки: linux, bash, аргументы, вложение, команды, отладка, strace
Раздел: Компьютер - Linux - Bash - Программирование на Bash
Запись: xintrea/mytetra_syncro/master/base/1652792344s1h4ixu83a/text.html на raw.github.com
|
|||||||
|
|||||||
Иногда в сложных многоуровневых командах Bash очень сложно понять, как вложенные команды будут вызываться и с какими аргументами. Что будет видеть та или иная команда? Чтобы это выяснить, надо перед командой написать вот такой "префикс": strace -f -e execve <исследуемаяКоманда> Вот пример обработки сложной команды, в которой сложно понять, где находятся аргументы команды sudo, и где находятся параметры команды bash. strace -f -e execve sudo -u postgres bash -c cd /tmp ";" notDir execve("/usr/bin/sudo", ["sudo", "-u", "postgres", "bash", "-c", "cd", "/tmp", ";", "notDir"], 0x7ffdaa12d828 /* 16 vars */) = 0 strace: Process 20245 attached [pid 20245] execve("/bin/bash", ["bash", "-c", "cd", "/tmp", ";", "notDir"], 0x606c95c88510 /* 14 vars */) = 0 [pid 20245] +++ exited with 0 +++ --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=20245, si_uid=117, si_status=0, si_utime=0, si_stime=0} --- +++ exited with 0 +++ Здесь видна вложенность аргументов, с которыми вызываются программы. Для sudo это: "sudo", "-u", "postgres", "bash", "-c", "cd", "/tmp", ";", "notDir" Для bash это: "bash", "-c", "cd", "/tmp", ";", "notDir" Кстати, еще, для понимания как выполняются команды, можно поместить их в bash-скрипт и прописать в него команду: set -ex Опция e будет генерировать досрочный выход при обнаружении ошибки. Опция x при выполнении каждой строки скрипта будет разворачивать ее, если в строке ипользовались какие-либо переменные, и печатать итоговую команду в консоль. Эту опцию считают опцией отладки в bash-скриптах. |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|