メモリ圧力コマンドの問題 - 予期しない文字列の終わり

メモリ圧力コマンドの問題 - 予期しない文字列の終わり

Pythonでこのコマンドを使用する際に問題があります。

stress-ng --vm-bytes $(awk '/MemAvailable/{printf "%d\n", $2 * 0.95;}' < /proc/meminfo)k --vm-keep -m 1

コマンドの先頭と末尾に二重引用符を入れる必要があります。たとえば、次のようになります。

"stress-ng --vm-bytes $(awk '/MemAvailable/{printf "%d\n", $2 * 0.9;}' < /proc/meminfo)k --vm-keep -m 1"

内部引用符をエスケープした後、予期しない文字列の終わりが発生しました。

"stress-ng --vm-bytes $(awk '/MemAvailable/{printf \"%d\n\", $2 * 0.9;}' < /proc/meminfo)k --vm-keep -m 1"

この問題を解決する方法を知っている人はいますか?

ベストアンサー1

文字列の文字52-59、

"stress-ng --vm-bytes $(awk '/MemAvailable/{printf \"%d\n\", $2 * 0.9;}' < /proc/meminfo)k --vm-keep -m 1"
                                                   ↑↑↑↑↑↑↑↑

上に強調表示されており、下に個別に表示されています。

                                            \  "  %  d  \  n  \  "

次のように解析されます。

  1. "     (引用符文字(エスケープ))
  2. %
  3. d
  4.        (改行文字、16進数0x0A)
  5. "

その結果、シェルには2行が表示されます。

stress-ng --vm-bytes $(awk '/MemAvailable/{printf "%d
", $2 * 0.9;}' < /proc/meminfo)k --vm-keep -m 1

したがって、awk次の2行のプログラムが表示されます。

/MemAvailable/{printf "%d
", $2 * 0.9;}

awkはプログラムを一度に1行ずつ解析します(バックスラッシュ+改行を使用しない限り)、アンバランスな引用符を確認します。ご存知のように合格したいですか?

/MemAvailable/{printf "%d\n", $2 * 0.9;}

つまり、実際の改行文字の代わりに文字を見るようにしますawk。したがって、次のものを脱出する必要があります。awk\n\\n

"stress-ng --vm-bytes $(awk'/MemAvailable/{printf \"%d\\n\", $2 * 0.9;}' < /proc/meminfo)k --vm-keep -m 1"

しかし、最初のコマンドは0.95を使用しますが、次の2行では0.9に変更します。

おすすめ記事