2017-10-07 21 views
0

我想要一个bash函数变成这样的一个符号参数...调用bash函数与中有

download HELLO&P=1&Q=2 

这个......

aria2c -d ~/Downloads "HELLO&P=1&Q=2" 

HELLO&P=1&Q=2是一块磁铁链接。如果它周围没有双引号,aria2c不起作用。但我似乎无法将它们放在一起。问题似乎是MAGNET链接最后有一系列&key=value对(在我的示例中为&P=1&Q=2),并且这些链接似乎被剥离并与链接的其余部分分离(即HELLO)。

这是我的.bash_profile函数。

download() { 
    aria2c -d ~/Downloads "$1" 
} 

下面是是一个示例输出。

~ $ download HELLO&P=1&Q=2 
[1] 7389 
[2] 7390 
aria2c -d /Users/lukejanicke/Downloads HELLO 
[1]- Done     download HELLO 
[2]+ Done     P=1 
~ $ 

甚至不知道哪里去了Q=2。有了真正的MAGNET链接,所有部件都以这种列举方式显示。

我需要一些捕获整个MAGNET链接作为单个参数,然后执行aria2c命令的链接引号。

+0

回复: “其中,Q = 2去” - 这是执行的(在前台,VS'P = 1'在子shell后台发生的那然后在完成该一行/三字符命令后退出)。如果在同一个shell中运行'echo'$ Q“',输出将是'2'。 –

回答

2

双引号使bash解释内部字符串。

我已经测试过它:

$ download() { aria2c -d ~/Downloads "$1"; } 
victor 0 12:48 /Users/victor/tmp 

$ download "http://localhost:8080/HELLO&P=1&Q=2" 

10/07 12:48:56 [NOTICE] Downloading 1 item(s) 

10/07 12:48:56 [ERROR] CUID#7 - Download aborted. 
URI=http://localhost:8080/HELLO&P=1&Q=2E 
+0

看来你必须在手动链接周围的引号 – lukejanicke

+0

是的,请注意,当你打电话下载,你也可以使用单引号。这是否解决你的问题? –

+0

这不是我想要的,但它似乎和我一样好。 – lukejanicke

2

&是shell中的特殊字符。您需要引用包含它的字符串:

download 'HELLO&P=1&Q=2' 

否则,它被理解为在后台运行左侧的命令分隔符。