Gnome 终端:-e 和 -- 之间的区别?

Gnome-terminal: Difference between -e and --?

我正在尝试打开一个显示正在写入文件的终端。进度百分比已写入文件,我希望用户能看到它。

我找到的大多数打开新终端的解决方案都说使用 -e,但是 returns

# Option "-e" is deprecated and might be removed in a later version of gnome-terminal
# Use "-- " to terminate the options and put the command line to execute after it.

我看到过关于这个错误的讨论,但我仍然不确定 -e-- 之间的功能区别到底是什么。如果我只是交换它们,我 运行 使用 -e 的脚本将停止正常工作,所以显然我缺少一些东西。

-e 将接受一个必须被解析为 shell 命令的参数,但它可以在其他 gnome-terminal 参数之前。例如,

gnome-terminal -e 'command "argument with spaces"' --some-other-gnome-terminal-option

-- 本身不是一个选项;这是一个特殊的参数,表示选项的 end-- 之后的任何内容都会被 gnome-terminal 自己的选项解析器忽略,并被视为普通参数。像

gnome-terminal -- 'command "argument with spaces"' --some-other-gnome-terminal-option

将在 -- 之后向 gnome-terminal 提供 2 个附加参数:

  1. command "argument with spaces"
  2. --some-other-gnome-terminal-option

此外,您会收到错误消息,因为 gnome-terminal 会尝试 运行 名为 command "argument with spaces" 的命令,而不是名为 command.[=32 的命令=]


实际上,这意味着您不能简单地将 -e 替换为 -- 然后收工。相反,您首先将 -e 移动到选项列表的 end

gnome-terminal --some-other-gnome-terminal-option -e 'command "argument with spaces"' 

然后将 -e '...' 替换为 -- ...。该命令及其每个参数现在是 gnome-terminal 的不同参数,这消除了对整个引用层的需要。

gnome-terminal --some-other-gnome-terminal-option -- command "argument with spaces"