Вдохновленный этим вопросом под названием « Когда встроенные команды загружаются в память , я пытался ответить на него , пытаясь выполнить следующую команду, и был немного удивлен, что не смог ее запустить:
$ strace cd $HOME
Есть ли способ, который я могу использовать для запуска strace для встроенных команд Bash?
strace
не запуск программы не приводит к следу?Ответы:
Если вы подумаете о том, как
strace
работает, то вполне логично, что ни один из встроенных в Bash компонентов не будет отслеживаться.strace
может только отслеживать реальные исполняемые файлы, а встроенные - нет.Например, моя
cd
команда:Трюк для проигрывания CD?
Я сталкивался с этой техникой, в которой можно было бы задействовать
strace
реальныйbash
процесс и при этом косвенно проследитьcd
этот путь.пример
В результате я могу провести
bash
процесс следующим образом:Это приглашение Bash, где оно находится в ожидании ввода. Итак, давайте дадим ему команду
cd ..
:Из вышеприведенного вывода вы можете увидеть, где я набрал команду,
cd ..
и нажал ввод, (\n
). Оттуда вы можете видеть, чтоstat()
функция была вызвана, и что впоследствии Bash сидит в другомread(0..
приглашении, ожидая другой команды.источник
К
strace
оболочке делаюcd /some/dir
:источник
$1
здесь, дляbash
, это не должно быть%
или%1
?Вы можете попробовать следующее:
Например:
источник