Bash命令和选项顺序


0

当我发出:

bash -l -c "./test"

子外壳确实可以作为登录外壳运行,但是在以下情况下:

bash -c "./test1" -l

父外壳(我正在运行命令的外壳)似乎忽略了该-l选项,并且子外壳未作为登录外壳运行。

如果我是对的,原因是该命令的选项顺序bash是相关的,在这种情况下,该-l选项必须在before之前-c。我对吗?

Answers:



0

Unix命令中的约定是文件名排在最后(因为许多命令可以使用几乎无限数量的文件名)。换句话说,看起来不像标志/选项的第一件事被解释为filename [1],其后的所有内容也被解释为。

[1]如果使用以破折号开头的文件,则可以通过两种方式消除歧义:

  • 使用./-foo代替-foorm ./-foobar
  • 在true选项的末尾使用'-',因为许多命令将其解释为选项的末尾和文件名的开头: rm -- -foobar。好的脚本编码惯例建议--在未预先确定文件名的命令中使用“ fence”。

您的答案似乎不足以解决这个问题。(1)您提到了一个约定,但它适用于“松散”的文件名,即与前一个选项无关的文件名;bash -c需要一些东西。(2)必需的参数bash -c可能不是文件(通常是命令),并且行为相同,这更多是约定不适用于此处的原因。(3)比较grep -f。它需要一个文件名,并且不会影响后面的选项。实际上,这是更常见的行为,bash -c非常独特。(4)您没有回答问题。
卡米尔Maciorowski

实际问题还有些不足,但是绝对可以根据(而不是模棱两可的)标题对所有人都有用的答案。还请注意使用“很多”而不是“全部”。
xenoid
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.