Команда-псевдоним с учетом аргументов?

Я хочу создать псевдоним для curl который автоматически пишет файл это curls в файл с тем же именем в текущем каталоге.

Например:

% curl https://bootstrap.pypa.io/get-pip.py
    curl https://bootstrap.pypa.io/get-pip.py > get-pip.py

Есть ли способ заставить псевдоним прочитать следующий аргумент и вставить его в фактически выполненный скрипт, как этот?

3 ответа

Решение

Псевдонимы не обрабатывают аргументы. К счастью, функции делают:

mycurl () {
    curl "$1" > "${1##*/}"
}

куда ${1##*/} является формой расширения параметров, которая гласит: "Удалите все до последней косой черты в $1".

Если вам нужно сделать это, я сделаю это с помощью функции bash или (в еще более сложных обстоятельствах) в своем собственном файле сценария в ~/bin/...

Но вы могли бы просто использовать wget вместо curl, Он должен делать то, что вы просите по умолчанию, и в качестве дополнительного бонуса вы получите возможность обойти проблему, связанную с URL-адресом без указанного файла (например: http://example.com/).

Есть несколько обходных путей, где вы можете использовать комбинацию переменных среды (PWD), подстановки команд или перенаправления ввода / вывода внутри псевдонимов. Вот самый близкий пример (на Bash):

alias curl='xargs -I% curl -o "%" "%" <<<'

который сохранит файл с тем же именем, что и URL:

$ curl https://bootstrap.pypa.io/get-pip.py
Warning: Failed to create the file https://bootstrap.pypa.io/get-pip.py

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

В качестве альтернативы вы всегда можете указать curl в wget:

$ alias curl=wget
$ curl https://bootstrap.pypa.io/get-pip.py
'get-pip.py' saved
Другие вопросы по тегам