Как запустить команду с другим рабочим каталогом?

Я использую tmux (более гибкий, чем screen) на своем сервере, и для выполнения команды непосредственно после подключения:

ssh myserver -t 'tmux send-keys -t session-name "ls ./" C-m; tmux attach -t session-name '

Вам просто нужно убедиться, что запущена сессия с именем session-name. C-m эмулирует ENTER после ввода "ls ./"

0
19.03.2019, 22:06
2 ответа

В этом случае вам вообще не нужно менять рабочий каталог (, как ответил Кусалананда ). Однако, если вы имеете дело с командами, которым действительно нужен конкретный рабочий каталог, вам нужно знать несколько вещей, которые облегчат вам задачу.

Во-первых, поскольку cdустанавливает переменную OLDPWD, мы можем использовать ее для возврата в исходный каталог, не зная его имени. Во-вторых, мы, вероятно, хотим вернуть, была ли команда выполнена успешно, поэтому используйте ;, а не &&там:

cd "$workdir" && somecommand ; cd "$OLDPWD"

Это по-прежнему ненадежно, если первый cdвыходит из строя; чтобы быть более надежным, нам действительно нужно

if cd "$workdir" ; then somecommand ; cd "$OLDPWD" ; fi

Даже на этом этапе мы боремся, нужен ли нам статус выхода somecommandпосле этого.


Обычно лучше запускать команду в подоболочке и изменять только рабочий каталог подоболочки:

( cd "$workdir" && somecommand )

Последний подход я обычно использую и рекомендую, если только вы не делаете что-то, что невозможно из подоболочки, например, устанавливаете переменные для последующих команд.

3
28.01.2020, 02:13

Честно говоря, я вообще не вижу смысла в двух обращениях к cd.

Похоже, вы не используете cdкаталог, в который зашли, ни для чего. Вы указываете абсолютный путь для расположения дампа базы данных. Если требуется какой-либо пользовательский файл конфигурации MySQL, он в любом случае будет взят из домашнего каталога пользователя.

Таким образом, вполне вероятно, вы могли бы просто использовать

mysqldump -uroot -p"craft" --add-drop-table craft \
    > ~/../docker-entrypoint-initdb.d/base.sql

независимо от того, из какого каталога вы его запускаете.

6
28.01.2020, 02:13

Теги

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