我想创建一个别名,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
在别名中使用环境变量 ()、命令替换或 IO 重定向的组合。以下是一些最接近的示例(在 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 转换为文件名来进一步纠正此问题操作字符串使用 shell 操作、命令替换basename
或awk
其他工具。
或者你也可以随时curl
指向wget
:
$ alias curl=wget
$ curl https://bootstrap.pypa.io/get-pip.py
'get-pip.py' saved