Shell 如何使用get-iplayer指定下载文件夹

Shell 如何使用get-iplayer指定下载文件夹,shell,command-line,Shell,Command Line,我正在为get\iplayer制作一个gui。(代码) 根据get iplayer的手册页,我可以使用 get-iplayer -g `index` --output="/some/desired/folder/" 这是可行的,如果我键入绝对路径,即--output=“/home/severin/Videos/”,我会得到所需的结果。但是,我想指定一条路径,这对其他用户也是可行的,即 --output=“~/Videos” 不幸的是,这根本不起作用。它在我的当前目录中创建一个新文件夹,例如,如

我正在为
get\iplayer
制作一个gui。(代码)

根据get iplayer的手册页,我可以使用

get-iplayer -g `index` --output="/some/desired/folder/"
这是可行的,如果我键入绝对路径,即
--output=“/home/severin/Videos/”
,我会得到所需的结果。但是,我想指定一条路径,这对其他用户也是可行的,即

--output=“~/Videos”

不幸的是,这根本不起作用。它在我的当前目录中创建一个新文件夹,例如,如果我在目录“~/Pictures/”中,上述命令将创建一个新目录
“/home/severin/Pictures/~/Videos”

这是get-iplayer中的错误还是我做错了


编辑:get-iplayer是一个perl命令行程序,用于录制BBC的iplayer节目。

Tilde扩展规则非常复杂

$ echo ~          # normal expansion
/home/amon
$ echo ~/foo      # exp at beginning of path
/home/amon/foo
$ echo ~foo       # but must be followed by a slash
~foo
$ echo foo/~      # not at the end of a path
foo/~
$ echo foo=~      # expansion ok after non-word char
foo=/home/amon
$ echo foo=~/foo  # can extend the path further
foo=/home/amon/foo
$ echo "~"        # no expansion inside quotes
~
$ echo -foo=~     # not when token begins with non-word character
-foo=~
$HOME
变量适用于所有这些情况:

$ echo $HOME; echo $HOME/foo; echo foo/$HOME; echo "$HOME"; echo --foo=$HOME;
/home/amon
/home/amon/foo
foo//home/amon
/home/amon
--foo=/home/amon

因此,您希望命令包含
--output=$HOME/Videos
或等效内容。请注意,这并不是完全可移植的:虽然面向最终用户的英语系统可能在主目录中有一个
视频文件夹,但在其他地区或操作系统中可能不是这样。

波浪扩展规则非常复杂

$ echo ~          # normal expansion
/home/amon
$ echo ~/foo      # exp at beginning of path
/home/amon/foo
$ echo ~foo       # but must be followed by a slash
~foo
$ echo foo/~      # not at the end of a path
foo/~
$ echo foo=~      # expansion ok after non-word char
foo=/home/amon
$ echo foo=~/foo  # can extend the path further
foo=/home/amon/foo
$ echo "~"        # no expansion inside quotes
~
$ echo -foo=~     # not when token begins with non-word character
-foo=~
$HOME
变量适用于所有这些情况:

$ echo $HOME; echo $HOME/foo; echo foo/$HOME; echo "$HOME"; echo --foo=$HOME;
/home/amon
/home/amon/foo
foo//home/amon
/home/amon
--foo=/home/amon

因此,您希望命令包含
--output=$HOME/Videos
或等效内容。请注意,这不是完全可移植的:虽然英语、面向最终用户的系统可能在主目录中有一个
视频
文件夹,但在其他地区或操作系统中可能不是这样。

Tilde扩展是一个shell功能–您使用的是什么shell,还是不使用?你能在你实际调用的地方发布具体的代码吗?我使用的是bash。我是用低级shell:run/s从一个公共lisp程序调用它的,但是,当使用bash和'get-iplayer-g 123--output=“~/Videos”时,结果是一样的。它与公共lisp无关。我想将它用于用common lisp编写的项目,但使用bash它已经无法工作。Tilde扩展是一个shell功能–您使用的是什么shell,还是不使用?你能在你实际调用的地方发布具体的代码吗?我使用的是bash。我是用低级shell:run/s从一个公共lisp程序调用它的,但是,当使用bash和'get-iplayer-g 123--output=“~/Videos”时,结果是一样的。它与公共lisp无关。我想将它用于一个用common lisp编写的项目,但是使用bash它已经失败了。谢谢,但这仍然不起作用。使用命令
getiplayer-g123--output=~/Videos
,它将在我的工作目录中创建一个目录“~”,以及一个子目录“Videos”,并将视频存储在那里。@severin在shell中,当它没有DWIM时,有时会对所有这些智能功能感到恼火。我编辑了答案以使用
$HOME
变量。这应该会更好。谢谢,但这仍然不起作用。使用命令
getiplayer-g123--output=~/Videos
,它将在我的工作目录中创建一个目录“~”,以及一个子目录“Videos”,并将视频存储在那里。@severin在shell中,当它没有DWIM时,有时会对所有这些智能功能感到恼火。我编辑了答案以使用
$HOME
变量。希望这会更好。