參數感知別名指令?

參數感知別名指令?

我想建立一個別名,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

相關內容