Можно ли автоматически анализировать аргументы команды?

Согласно ссылке моего комментария(Что означает./ (косая черта )в Linux? ), и как вы правильно думаете, слэш(/)- это каталог "представление".

Однако в ваших двух примерах косая черта обозначает разные вещи:

mv ~/Documents/newfolder./anothernamefolder

переместите newfolderиз Documents, расположенного в домашнем каталоге пользователя (~), в текущий каталог(./)и назовите его anotherfolder.

Во втором

touch {jan,feb,mar,apr}_{2017..2019}/file{1..100}

Вы трогаете файлы в нескольких каталогах.

Таким образом, для каждого каталога, указанного в команде :{jan,feb,mar,apr}_{2017..2019}, создайте файлы file{1..100}.

Why there is "/" here? What does it do? Why I can't type:

Как и выше, ./представляет текущий каталог.

Если вы использовали

mv ~/Documents/newfolder. anothernamefolder

вы получите сообщение об ошибке, так как будете указывать неоднозначные перенаправления:

$ mv ~/Documents/newfolder. anotherfolder
usage: mv [-f | -i | -n] [-v] source target
       mv [-f | -i | -n] [-v] source... directory

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

$ mv ~/Documents/newfolder.
$ ls
newfolder

0
23.05.2021, 10:45
2 ответа

Вы можете просмотреть аргументы команды для поиска @или https://в команде, чтобы найти репозиторий, а затем проанализировать URL-адрес, чтобы извлечь то, что вам нужно

Например, в Python:


import sys

if len(sys.argv) > 1:
    for i in sys.argv:
        # Do whatever you want (parsing the URL...)

1
28.07.2021, 11:30

Я придумал хакерский скрипт :/usr/local/bin/git, который использует идею, упомянутую Николасом. Он основан на функциях --reference-if-ableи --dissociate, доступных в последних версиях Git.

#!/usr/bin/env bash

# The real executable is located at /usr/local/bin/tig.

command=$1

cache=$HOME/.cache/git/repositories

if [[ ! $command == "clone" ]]; then
    /usr/local/bin/tig "$@"
    exit
fi

caching=false

for argument in "${@:2}"; do
    case $argument in
        --reference | --reference-if-able)
            caching=false
            break
            ;;
        *git@github.com:*)
            caching=true
            [[ $argument == *.git ]] && argument=${argument%.git}
            folder=$cache/$argument
            ;;
    esac
done

if $caching; then
    echo "INFO: Using cache: $folder"
    /usr/local/bin/tig clone \
        --reference-if-able "$folder" --dissociate "${@:2}"
else
    /usr/local/bin/tig "$@"
fi

Заявление об ограничении ответственности :Это подходит только для целей разработки. Лучший способ — использовать прокси-сервер Git, например Goblet, как предложил Стивен.

0
28.07.2021, 11:30

Теги

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