Выполните команду из другого каталога в ударе

Скажите, что я делаю это:

cd subdir
git init
cd ../

Существует ли способ сделать это с единственной командой, или возможно два, вместо того, чтобы иметь необходимость приблизиться и из каталога для выполнения команды туда?

(Не поиск определенного для мерзавца решения; это - просто пример.)

122
задан 17.04.2011, 19:05

6 ответов

Это часто - лучший способ:

( cd dir ; git init )

или

( cd dir && git init )

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

206
ответ дан 07.12.2019, 07:49

Не точно, что Вы спрашиваете (у Вас есть реальные ответы выше с подоболочкой), но смотрят на pushd и popd

13
ответ дан 07.12.2019, 07:49

Можно сгруппировать команды с &&, т.е.

cd subdir && git init && cd ../

Если Вы не хотите зависимости от кода выхода каждой команды, можно использовать; вместо этого, т.е.:

cd subdir ; git init ; cd ../
2
ответ дан 07.12.2019, 07:49

У Вас есть несколько опций. Можно или сгруппировать команды с && или ;. Как это:

cd subdir && git init && cd ..

или

cd subdir; git init; cd ..

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

Другая опция состояла бы в том, чтобы определить функцию и использовать ее, например:

function cdinit() {
    cd $1
    git init
    cd ..
}

Затем можно выполнить команду:

cdinit subdir

И это будет автоматически git init в том каталоге и перемещении из него.

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

function cdinit() {
    for arg in $@
    do
        cd $arg
        git init
        cd ..
    done
}

Можно затем выполнить это с:

cdinit subdir1 subdir2 subdir3

И это сделает git init в subdir1, subdir2, и subdir3.

6
ответ дан 07.12.2019, 07:49

Необходимо скачкообразно двинуться в целевой каталог, если команда не имеет параметра имени файла или имени каталога.

Но можно записать сценарий удара, который берет целевой каталог и команду как параметры. Для этого Вы могли смотреть на pushd и popd: http://ss64.com/bash/pushd.html

Я записал бы, что мало сценария для Вас, но у меня нет поля Linux здесь :)

2
ответ дан 07.12.2019, 07:49

Программы имеют различные способы обработать аргументы, таким образом, у некоторых будет некоторый эквивалент-folder=name опции. Кроме того исключение, стандарт, даже на MS DOS, просто

Программа $ subdir

Иногда Вам нужно

Программа $ subdir/

Программа откроет папку, работу с нею, тот же способ, которым Вы работаете с файлом, и когда-то законченный, возвращает управление Вашей оболочке, на которую указывают на Ваш исходный стандартный каталог. Программы обработали этот путь, ДЕЙСТВИТЕЛЬНО имеют проблему, что ошибочные выводы (как дампы ядра) переходят к файлу в текущем каталоге Вашей оболочки (а не subdir.)

Нет никакого обходного решения, если программа не имеет командные коммутаторы в наличии для определения другого места. Некоторые программисты берут артистическую лицензию между "программой каталога, был назван от", и "программе каталога сказали работать в".

1
ответ дан 07.12.2019, 07:49

Теги

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