web-dev-qa-db-ja.com

ダブルハイフンは `lxc exec`で何をしますか

一部のチュートリアル(linuxcontainers.orgの Getting Started など)では、--を使用してLXDコンテナー内でプログラムを実行するときにダブルハイフン(lxc exec)の使用を推奨しています。のように

$ lxc exec my-container -- apt update

--は、提供されたフラグをプログラムに渡すようlxc execに指示していると思われます。 lxc exec my-container apt list --upgradableは失敗します

error: flag provided but not defined: --upgradable

ただし、この問題に関するドキュメントは見つかりません。誰かがそれが正確に何であるかを確認したり、明確にしたりできますか?

また、さまざまな場所で--を使用するインスタンスを見ました。たとえば:

$ lxc exec my-container apt -- list --upgradable
$ lxc exec my-container apt list -- --upgradable

違いは何ですか?

3
Jonathan Y.

一部これは 二重ダッシュの意味 の複製です。

lxcについて興味深い質問をするので、答えさせてください。 2つの例では、--の両方のインスタンスが、lxcに、その時点以降のオプションを解釈しないように指示しています。この場合の異なる配置は無関係です。ただし、コンテナでコマンドラインを実行しているため、そのコマンドラインの一部として--を使用する場合があります。以下を考慮してください:/tmp/bar行を含む--fooファイルを作成しました。次のコマンドがコンテナで実行されました。

root@myContainer:~# echo "here is --foo" >/tmp/bar
root@myContainer:~# echo "this line has no double dash" >> /tmp/bar
root@myContainer:~# cat /tmp/bar
here is --foo
this line has no double dash
root@myContainer:~# exit

ここで、grepを使用して検索します。 grepには、--が検索パターンの一部であり、grepのオプションではないことを知らせる必要があります。

$ lxc exec myContainer -- grep -- --foo /tmp/bar
here is --foo

単一の--を使用すると、lxcコマンドラインによって消費され、エラーが発生します。

$ lxc exec myContainer grep -- --foo /tmp/bar
grep: unrecognized option '--foo'
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.
4