Как запустить команду в папке без изменения каталога в Bash

Убунту 14

В мире Linux и Unix-подобных операционных систем Bash является широко используемой оболочкой. Часто бывает необходимо запустить команду в определенном каталоге, сохраняя при этом текущий рабочий каталог. В этой статье мы рассмотрим различные методы выполнения этой задачи.

Чтобы запустить команду в папке без изменения каталога в Bash, вы можете использовать круглые скобки и команду cd, команды pushd и popd, команду find или определить функцию Bash. Эти методы позволяют выполнять команды в определенных каталогах, сохраняя при этом текущий рабочий каталог.

Использование круглых скобок и команды cd

Один из самых простых способов запустить команду в определенном каталоге без изменения текущего каталога — использовать круглые скобки и команду cd. Вот как это работает:

(команда cd /path/to/directory &&)

В этой команде круглые скобки создают подоболочку. Команда cd изменяет каталог на указанный путь в этой подоболочке. Оператор && гарантирует, что команда будет выполнена только в случае успешного изменения каталога. Как только подоболочка завершит свою работу, вы останетесь в исходном каталоге.

Например, если вы хотите просмотреть содержимое каталога /etc, не покидая текущий каталог, вы можете использовать:

(cd /etc && ls)

Использование команд pushd и popd

Другой подход предполагает использование команд pushd и popd. Эти команды работают со стеком каталогов и могут запоминать ваши предыдущие каталоги.

pushd /путь/к/каталогу команда popd

Команда pushd сохраняет ваш текущий каталог, а затем переходит в указанный каталог. Затем вы можете запустить свою команду. Команда popd используется для возврата в исходный каталог.

Например, чтобы создать файл с именем test.txt в каталоге /tmp, вы можете использовать:

pushd /tmp touch test.txt popd

Использование команды find

Команда find также может использоваться для запуска команды в определенном каталоге. Вот как:

находить . -maxглубина 1 -тип d -имя “каталог” -execdir команда \;

В этой команде параметр -maxглубина 1 гарантирует, что find просматривает только текущий каталог. -type d указывает, что мы ищем каталоги, а -name «каталог» указывает имя каталога. -execdir команда \; выполняет команду в найденном каталоге.

Например, чтобы найти каталог с именем test в текущем каталоге и запустить в нем команду ls, используйте:

находить . -maxглубина 1 -тип d -имя “тест” -execdir ls \;

Использование функции Bash

Вы также можете определить функцию bash для перехода в целевой каталог, запуска указанной команды и затем возврата в предыдущий каталог.

run_within_dir() { target_dir=”$1″ сдвиг команды=”$@” old_dir=$(pwd) cd “$target_dir” && $command cd “$old_dir” }

В этой функции target_dir — это каталог, в котором вы хотите запустить команду. сдвиг используется для удаления первого аргумента из списка, оставляя остальные в качестве команды для выполнения. old_dir сохраняет текущий каталог перед его изменением.

Чтобы использовать эту функцию, вы можете использовать ее в своем профиле или скрипте bash. Затем вызовите его, указав каталог и команду в качестве аргументов:

run_within_dir /etc ls

В заключение, есть несколько способов запустить команду в определенном каталоге, не меняя текущий каталог в Bash. Эти методы обеспечивают гибкость в зависимости от ваших потребностей и требований команды, которую вы хотите запустить.

Чтобы запустить команду в определенном каталоге без изменения текущего каталога в Bash, вы можете использовать синтаксис (cd /path/to/directory && команда), где /path/to/directory — это каталог, в котором вы хотите запустить команду. и команда — это команда, которую вы хотите запустить.

Оператор && в синтаксисе (команда cd /path/to/directory &&) гарантирует, что команда будет выполнена только в случае успешного изменения каталога. Если команде cd не удастся изменить каталог, команда не будет выполнена.

Чтобы запустить несколько команд в определенном каталоге, не меняя текущий каталог в Bash, вы можете использовать { cd /path/to/directory; команда1; команда2; } Синтаксис. Этот синтаксис создает блок кода, в котором команда cd меняет каталог, и последующие команды выполняются в этом каталоге.

Если вы используете синтаксис (команда cd /path/to/directory &&), вы автоматически вернетесь в исходный каталог после того, как подоболочка завершит свою работу. Если вы используете команды pushd и popd, команда popd используется для возврата в исходный каталог.

Да, вы можете использовать переменные в пути к каталогу при запуске команды в определенном каталоге. Например, вы можете использовать (cd “$directory” && команда), где $directory — это переменная, содержащая путь к каталогу.

Чтобы запустить команду в определенном каталоге и всех его подкаталогах, вы можете использовать команду find. Например, вы можете использовать команду find /path/to/directory -type d -execdir \; где /path/to/directory — это каталог, в котором вы хотите запустить команду, а команда — это команда, которую вы хотите запустить.

Да, вы можете использовать подстановочные знаки в имени каталога при запуске команды в определенном каталоге с помощью команды find. Например, вы можете использовать find. -type d -name “*каталог*” -execdir команда \; где *каталог* — это шаблон подстановочного знака для имени каталога, который вы хотите сопоставить.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *