Как я выполняю команду из определенного каталога, на самом деле не изменяясь на тот каталог

Я хочу выполниться, команда как 'мерзавец отмечают-l' в каталоге,/home/user/git/app/, но я нахожусь на самом деле в/home/user. Как я могу сделать это в ударе, не изменяя мой рабочий каталог?

Так НЕТ:

cd /home/user/git/app && git tag -l

потому что это на самом деле изменяет мой рабочий каталог и должно сделать 'CD/home/user' снова.

17
задан Paused until further notice. 25 January 2010 в 20:06
поделиться

5 ответов

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

noufal@sanctuary% pwd
/tmp/foo
noufal@sanctuary% (cd ../bar && pwd && ls -a )
/tmp/bar
./  ../
noufal@sanctuary% pwd
/tmp/foo
noufal@sanctuary%            
37
ответ дан 30 November 2019 в 10:49
поделиться

Попробуйте использовать

cd -

после того, как все сделано. Эта команда используется для возврата к последнему рабочему каталогу.

0
ответ дан 30 November 2019 в 10:49
поделиться
- 4746484-

Если рассматриваемая команда всегда будет команда Git, вы должны просто использовать - GIT-DIT и - рабочее дерево Параметры, чтобы сказать Git, что делать! (Или если вы делаете это много в течение сценария, установите переменные git_dir и git_work_tree до соответствующих путей)

Если это общий вопрос, я считаю, что andrzej имеет начало наилучшего предложения: использовать подставка. Тем не менее, правильный способ начать подпульду, чтобы использовать скобки, чтобы не использовать подстановку команды (если вы фактически не хотите захватить вывод):

( cd $dir && run_command )

Другое решение, как предложено FELIX и IBREAD, будет работать, Но будьте осторожны - если команда, которую вы выполняете, возможно, является функцией оболочки, то она также может и изменить эффект CD - в конце. Самое безопасное в общем случае состоит в том, чтобы сначала хранить текущий каталог в переменной.

4
ответ дан 30 November 2019 в 10:49
поделиться

Вот еще одно решение: используйте pushd для изменения каталога, затем popd для возврата:

pushd /home/user/git/app && git tag -l; popd
6
ответ дан 30 November 2019 в 10:49
поделиться

Вы можете сделать что-то вроде (CD / HOME / user / git / app && git tag -l) . Это порождает новую оболочку и выполняет команды в оболочке, не меняя оболочку. Вы можете проверить это, выполняя следующее:

$ echo $OLDPWD
/Users/daveshawley
$ (cd / && ls)
...
$ echo $OLDPWD
/Users/daveshawley
1
ответ дан 30 November 2019 в 10:49
поделиться
Другие вопросы по тегам:

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