Невозможно контролировать процесс, проверяя его результат. По ссылке описано, как контролировать время выполнения и выполнять различные проверки.https://stackoverflow.com/questions/5161193/how-to-kill-a-child-process-after-a-given-timeout-in-bash
Если вы можете выбрать только суффикс имени файла и хотите отобразить путь, начинающийся с корневого каталога, использование достаточного количества ../
— единственный способ. Невозможно «перезапустить» путь из корневого каталога на полпути. Также нет способа сослаться на домашний каталог в файле, поэтому вам нужно снова использовать что-то вроде../../../../../home/username
(с достаточным количеством ../
), предполагая, что домашний каталог пользователя — /home/username
.
Некоторые приложения выполняют дополнительные расширения имен файлов, но это необычно. Одно расширение, которое умеренно распространено в интерактивных приложениях, — это расширение ~/
в самом начале пути. Приложения командной строки не делают даже этого, потому что такое расширение — работа оболочки.
Требуемое количество ../
может быть или не быть количеством компонентов пути в префиксе, которым вы не управляете, потому что символические ссылки изменяют эффективную глубину. Например, если /dir
, /foo
и /foo/bar
— каталоги, а /foo/sym
— символическая ссылка на /dir
, /foo/bar/..
— корневой каталог. Но если /sym
— это символическая ссылка на /foo/bar
, то /sym/..
— это /foo
,и вам нужно /sym/../..
, чтобы вернуться в корневой каталог.
Слишком много ../
не повредит, если только вы не столкнетесь с ограничением длины пути.
Другим потенциальным методом может быть использование символической ссылки на каталог выше. Но для этого нужно, чтобы такая символика существовала, и чтобы вы знали о ней. Точка монтирования (, например.mount --bind / /a/really/long/path/root
)также может позволить вам выйти из дерева каталогов.
Обратите внимание, что мой ответ до сих пор обсуждает имена файлов. Если вы можете внедрить команду оболочки , как в eval "cat /a/really/long/path/idk/how/long/$param1"
, способ анализа путей не имеет значения :, просто введите специальные символы оболочки, например. установите param1
на nonexistent || true; cat /the/file/I/want
.