Команда-псевдоним с учетом аргументов?
Я хочу создать псевдоним для curl
который автоматически пишет файл это curl
s в файл с тем же именем в текущем каталоге.
Например:
% 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