我想调用/ bin/sh,并使用-c选项传递命令'+ x',即执行名为'+ x'的程序,其名称以加号开头.
由于'+ x'被/ bin/sh解释为一个选项(具体来说,禁用'x'选项),因此必须阻止/ bin/sh将其解释为一个选项.根据我使用的/ bin/sh,我得到以下不同的结果:
(1)第一个变种:
/bin/sh -c -- +x
Run Code Online (Sandbox Code Playgroud)
在Linux上使用Dash和Bash:执行命令+ x.
使用FreeBSD的sh:执行命令 - 并设置+ x选项.
(2)第二种变体:
/bin/sh -c +x
Run Code Online (Sandbox Code Playgroud)
在Linux上使用Dash和Bash:设置了+ x选项,并且出现错误,因为选项-c缺少参数.
使用FreeBSD的sh:执行命令+ x.
(3)第三种变体:
/bin/sh -c - +x
Run Code Online (Sandbox Code Playgroud)
在Linux上使用Dash和Bash:执行+ x.
使用FreeBSD的sh:执行命令 - 并设置选项+ x.
(4)第四种变体:(按评论中的建议添加)
/bin/sh -c+x
Run Code Online (Sandbox Code Playgroud)
在Linux上使用Dash和Bash:无效/非法选项'+'
使用FreeBSD的sh:Bad -c选项
我的问题:POSIX开的是什么?
我在这里阅读POSIX规范:http: //pubs.opengroup.org/onlinepubs/9699919799/utilities/sh.html
引用它:"单个连字符应被视为第一个操作数,然后被忽略.如果' - '和" - "都作为参数给出,或者如果其他操作数在单个连字符之前,则结果是未定义的.
我不确定这句话是否也适用于'-c'之后的单个短划线.
那么,哪一个是正确的,Dash/Bash还是FreeBSD?或者,如果两者都是正确的,因为POSIX允许两者,如何可移植?
多年来我一直在我的windows box上使用Hummingbird Exceed作为我的Xserver.我几乎总是使用xterms,但有时打开的窗口数量可能会失控,难以管理.想知道是否有一个终端模拟器在WinXP上运行,支持选项卡式窗口,类似于KDE上的Konsole.