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 \ "
다음과 같이 구문 분석됩니다.
"
(따옴표 문자(이스케이프))%
d
- (개행 문자, 16진수 0x0A)
"
결과적으로 쉘에는 두 줄이 표시됩니다.
stress-ng --vm-bytes $(awk '/MemAvailable/{printf "%d
", $2 * 0.9;}' < /proc/meminfo)k --vm-keep -m 1
따라서 awk
다음 두 줄의 프로그램이 표시됩니다.
/MemAvailable/{printf "%d
", $2 * 0.9;}
awk는 프로그램을 한 번에 한 줄씩 구문 분석하므로(백슬래시+줄 바꿈을 사용하지 않는 한) 불균형한 따옴표를 확인합니다. 아시다시피 합격하고 싶으시죠?
/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를 사용하지만 다음 두 줄에서는 0.9로 변경합니다.