我正在尝试通过命令行使用 Firefox 打开文件。我运行的命令是;
firefox -remote "openurl(file://`pwd`/filename.html)"
我希望能够通过点击 Tab 键来自动完成文件的名称,有时它可能会很长。
答案1
嗯,它很笨重,但你可以输入
sh -c 'firefox -remote "openurl(file://`pwd`/$1)"' - Pea
Tab
或者
sh -c 'firefox -remote "openurl(file://$1/$2)"' - `pwd` Pea
Tab
如果您要定期执行此操作(没有太多变化),您可能需要将其放入脚本中。
PS 您可以省略后面的一个斜线,file:
因为pwd
将提供一个。
编辑:
这是如何/为什么起作用的?
您正在运行的交互式 shell(我们假设它是,bash
并以此命名,以消除歧义)是读取您的命令行输入并执行自动完成等操作的 shell,并且它要求它自动完成的任何命令行单词都必须看起来像文件名或路径名。我的经验是它可以处理
…
$PWD/Sco
Tab
和
…
`pwd`/Sco
Tab
但不是
…
$(pwd)/Sco
Tab
去想想吧。YMMV。无论如何,它无法处理
…
"openurl(file://`pwd`/Sco
Tab
因为它不可能被解释为文件名或路径名(除非bash
可以解析该"openurl(…
调用,但它不能)。
诀窍是让它对孤立的文件名进行自动完成,然后将各个部分粘合在一起。为交互式 shell 设置 、 等的唯一方法$1
是$2
键入命令,如set foo bar
或set -- foo bar
,但通常不会这样做。我们需要sh
命令行上的 ,以便我们可以 通过在命令行上输入值来设置其$1
、等。因此,我们使用进行自动完成,它为 提供命令行参数,然后我们使用命令$2
bash
sh
sh
'firefox -remote "openurl(file://$1/$2)"'
解释$1
和$2
,然后“将各部分粘合在一起”。
写这篇文章的过程让我意识到了另一种选择:
set `pwd` Sco
Tab(自动完成) Enter
其次是
firefox -remote "openurl(file:/$1/$2)"
Enter
正如我之前指出的,上面的第一个命令设置了交互式 shell ( )的位置参数 ($1
和) ,而第二行则使用了它们。正如我所提到的,人们通常不会设置交互式 shell 的位置参数,但这并没有什么错——只是不常见而已。应该注意的是,和将保留这些值,直到您重置它们或注销。$2
bash
$1
$2
您应该能够将以上两行合并为一行:
set `pwd` Sco
Tab(自动完成);
firefox -remote "openurl(file:/$1/$2)"
Enter