파일에 명령 쓰기

파일에 명령 쓰기

run $(python -c "print('A'*256)")bash 스크립트를 사용하여 파일에 명령을 작성하는 데 문제가 있습니다(명령의 출력이 아님 + 명령이 실행되는 것을 원하지 않음). 파일을 여기에 포함시키고 싶습니다 .

변수에 추가한 다음 에코를 통해 파일에 전달하려고 시도했지만 작동하지 않았습니다.

저도 비슷한거 해봤는데echo "run $(python -c "print('A'*256)")" > file.txt

둘 중 하나도 작동하지 않았습니다. 실제로 몇 가지 오류가 발생하여 문제가 여러 개의 큰따옴표 때문이라고 생각하여 작은따옴표로 변경했습니다. 이것은 파일 실행 시 이 출력을 제공합니다.

그래서 기본적으로 그것을 완전히 무시했습니다 $(python -c "print('A'*256)").

이 문제를 해결하는 방법을 아시나요?

답변1

임의의 문자열을 다음으로 리디렉션하는 가장 안정적인 방법입니다.여기에서 문서를 사용하세요.:

cat > file.txt <<'EOT'
run $(python -c "print('A'*256)")
EOT

file.txt이전 텍스트가 표준 입력으로 사용될 때까지 EOT한 줄을 그대로 넣은 cat다음 cat리디렉션을 위해 다시 뱉어냅니다. 쉘은 EOT줄의 시작 부분에 도달할 때까지 문서를 계속 읽으므로 필요한 경우 한 번에 여러 줄을 넣을 수 있습니다( EOT문자열에서 이런 일이 발생하면 다른 것을 사용하십시오. 구분 기호는 임의적입니다).

구분 기호가 상단에 인용되어 있으므로 여기에서는 문서 1 의 본문에 대한 확장이 수행되지 않으며 모든 문자가 그대로 전달됩니다.Here-documents의 동작은 POSIX에 의해 지정됩니다.그리고 모든 쉘에서 작동합니다.

1어떤 경우에는 일부 확장을 수행하는 일부 이전 버전의 Bash에 버그가 있었습니다., 그러나 여기서는 발생하지 않습니다.

답변2

대신 이스케이프 문자를 사용해 보세요.

echo run \$\(python -c \"print\(\'A\'*256\)\"\) > file.txt

답변3

문자열*2종견적은 항상 다루기가 어렵습니다. 세 가지 방법이 있습니다:

  • 두 참조를 번갈아 사용합니다. 작은따옴표( ") 안에 큰따옴표( ')를 넣거나 그 반대의 경우도 마찬가지입니다.

    먼저 문자열을 세 개의 세그먼트로 분할합니다.

    run $(python -c "print ('A'*256) ")
    ↑---------1----------↑ ↑---2---↑ ↑3↑
    

    첫 번째와 세 번째 부분에는 작은따옴표가 포함되지 않으며 두 번째 부분에는 큰따옴표가 포함되지 않습니다. 그런 다음 적절하게 인용하십시오.

    echo 'run $(python -c "print'"('A'*256)"'")'
         ↑----------1-----------↑↑----2----↑↑-3↑
    

    하위 문자열을 함께 실행하면 됩니다.

  • 문자열을 큰따옴표로 묶은 다음 이를 \"에코하려는 각 리터럴 큰따옴표에 사용합니다. 또한 $대체\$

    echo "run \$(python -c \"print('A'*256)\")"
    
  • Bash에서 작동하는 유일한 방법은 인용된 문자열을 사용하는 것입니다 $'…'. 이러한 문자열에서는 다음을 사용하여 작은따옴표를 이스케이프할 수 있습니다 \'.

    echo $'run $(python -c "print(\'A\'*256)")'
    

물론 이 > file.txt부분은 예상하신대로입니다.

관련 정보