
私は現在、Centos 7 VM 上で Python スクリプトを書いていますが、その途中でいくつかのシェル コマンドを実行する必要があります。その作業を実行するライブラリを見つけましたが、そのうちの 1 つでエラーが発生しています。これらのコマンドはテキスト ファイルから提供されたため、実際に何をするのかはわかりません。簡単なものは理解できますが、これらは私のレベルを超えています。エラーが発生するのは 2 行だけなので、スクリプト自体の問題ではなく、使用方法の問題であることがわかります./linkerd
。linkerdのバイナリ ファイルですが、linkerd_images.txt にはイメージのリストがあります。
./linkerd install --ha --ignore-cluster | grep image: | grep linkerd | sed -e 's/^ .*images: //' | sort | uniq >> linkerd_images.txt
./linkerd viz install --ha --skip-checks | grep images: | sed -e 's/^ .*images: //' | sort | uniq >> linkerd_images.txt
linkerd のバイナリを使用しているため、アプリケーション固有のものである可能性があることは理解しています。その場合、ドキュメントがリポジトリで見つからないため、ドキュメントがどこで見つかるかを調べる必要があります (そのため、最初にここに来ました)
編集: スクリプトで発生したエラーは次のとおりです:
UnicodeDecodeError: 'utf-8' codec: can't decode byte 0xe2 in position 49: Invalid continuation byte
ターミナルで最初のコマンドを単独で実行すると、次のようになります。
sed: -e expression #1, char 1: unknown command: '[Question Mark Symbol]'
私は Python コードに対する直接的な回答を期待していないので、エラー自体についてはあまり心配していません。コマンド自体がすべての複雑な文字を使って何を行うのか理解したいだけです。
Pythonコードを追加するように求められました。私はasyncio
'sを使用しました実行機能ほとんどのシェル コマンドを実行します。したがって、Python コード自体は次のようになります。
asyncio.run(run(
"""./linkerd install --ha --ignore-cluster | grep image: | grep linkerd | sed -e 's/^ .*images: //' | sort | uniq >> linkerd_images.txt"""))
linkerd バイナリ ファイルも確認しましたが、確かに json ファイルのようです。
答え1
私が見つけた答えはこれです
問題はキャレットではなく、アポストロフィでした。私にコマンドを教えてくれた人は、フランス語のキーボードでそれを入力しました。これは私の仕事用の PC にあるため、私は別の画面を見ながらここで入力したので、何も考えずに適切なアポストロフィを再入力しました。sed のエラーとその意味を調べたので、はるかに理解しやすくなりました。は(この場合は)sed -e expression #1
の後の最初の単語です。文字 #1 は になりますが、事前に知っていたら最初に調べるべきだったのはここです。-e
's/^
'