
Я хочу создать псевдоним, curl
который автоматически записывает файл curl
в файл с тем же именем в текущем каталоге.
Например:
% curl https://bootstrap.pypa.io/get-pip.py
curl https://bootstrap.pypa.io/get-pip.py > get-pip.py
Есть ли способ заставить псевдоним прочитать следующий аргумент и вставить его в фактически выполняемый скрипт, как здесь?
решение1
Псевдонимы не обрабатывают аргументы. К счастью, это делают функции:
mycurl () {
curl "$1" > "${1##*/}"
}
Где ${1##*/}
находится форма расширения параметров, которая гласит: «Удалить все до последнего слеша в $1».
решение2
Если вынужныйЧтобы сделать это, я бы использовал функцию bash или (в еще более сложных случаях) ее собственный файл скрипта в ~/bin/
...
Но вы можете просто использовать wget
вместо curl
. Он должен делать то, что вы просите, по умолчанию, и в качестве дополнительного бонуса вы сможете обойти проблему, связанную с URL без указанного файла (например: http://example.com/
).
решение3
Есть некоторые обходные пути, где вы можете использовать комбинацию переменных окружения ( 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