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

Это можно добавить к принятому ответу для решения «кросс-браузер».

Источники:

CSS

.your_element{
    -ms-word-break: break-all;
    word-break: break-all;

 /* Non standard for webkit */
     word-break: break-word;

    -webkit-hyphens: auto;
       -moz-hyphens: auto;
        -ms-hyphens: auto;
            hyphens: auto;
}

15
задан 06.05.2020, 10:05

3 ответа

Если вы хотите избежать второго cd, вы можете использовать

(cd .folder && command --key)
another_command --key
38
ответ дан 06.05.2020, 10:05
  • 1
    Очень быстрый ответ! Я даже can' t для принятия его, потому что система doesn' t позволяют мне)), – EI Captain v2.0 06.05.2020, 10:06
  • 2
    I' d изменяются ; на && в придачу. Если CD перестал работать (например, потому что Вы typoed имя каталога), Вы, вероятно, don' t хотят выполнить команду. – EI Captain v2.0 06.05.2020, 10:06
  • 3
    +1 для @geirha' s комментарий. It' s действительно важный момент. OP, Вы рассмотрели бы редактирование? – vadian 06.05.2020, 10:07
  • 4
    волшебная круглая скобка! как это работает? +1 – Umitk 06.05.2020, 10:07
  • 5
    Команды в круглой скобке выполняются в новом процессе оболочки, настолько изменяющемся каталог, устанавливание переменных среды и т.д. в круглой скобке не влияет на родительскую оболочку, которая выполняет другие команды. – Rashmi Ranjan mallick 06.05.2020, 10:08

Без cd ... Ни разу. Я нашел два пути:

# Save where you are and cd to other dir
pushd .folder
command --key
# Get back where you were at the beginning.
popd
another_command --key

и второй:

find . -maxdepth 1 -type d -name ".folder" -execdir command --key \;
another_command --key
8
ответ дан 06.05.2020, 10:06

Мне нужно было сделать это без использования bash, и я был удивлен, что нет утилиты (аналогично env(1) или sudo(1), которая запускает команду в измененном рабочем каталоге. Итак, я написал простой C Программа, которая делает это:

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

char ENV_PATH[8192] = "PWD=";

int main(int argc, char** argv) {
    if(argc < 3) {
        fprintf(stderr, "Usage: in <dir> <cmd> [<args>...]\n");
        return 1;
    }

    if(chdir(argv[1])) {
        fprintf(stderr, "Error setting working directory to \"%s\"\n", argv[1]);
        return 2;
    }

    if(!getcwd(ENV_PATH + 4, 8192-4)) {
        fprintf(stderr, "Error getting the full path to the working directory \"%s\"\n", argv[1]);
        return 3;
    }

    if(putenv(ENV_PATH)) {
        fprintf(stderr, "Error setting the environment variable \"%s\"\n", ENV_PATH);
        return 4;
    }

    execvp(argv[2], argv+2);
}

Использование так:

$ in /path/to/directory command --key
0
ответ дан 06.05.2020, 10:07

Теги

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