参数感知别名命令?

参数感知别名命令?

我想创建一个别名,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 操作、命令替换basenameawk其他工具。

或者你也可以随时curl指向wget

$ alias curl=wget
$ curl https://bootstrap.pypa.io/get-pip.py
'get-pip.py' saved

相关内容