이진 데이터가 포함된 변수를 만든 다음 명령에서 실행하고 싶습니다. 예:
#!/bin/bash
var="$(cat /bin/sleep)"
"$var" 9999
답변1
다음과 같은 이유로 이와 같은 변수를 실행할 수 없습니다.
- 커널 실행 파일,
- 쉘은 변수에 저장된 명령줄을 실행할 수 있지만 이진 데이터를 해석할 수는 없습니다.
- 바이너리 파일의 내용을 변수에 저장하는 것은 파일에 널 바이트가 있을 수 있기 때문에 제대로 작동하지 않을 수 있습니다(그리고 대부분의 쉘은 변수에 널 바이트를 가질 수 없습니다).
- 변수의 내용이 포함된 임시 파일을 얻기 위해 프로세스 대체를 사용하더라도 프로세스 대체 파일 핸들을 실행할 수 없습니다.
따라서 내용을 파일에 저장하고, 파일을 실행 가능하게 만들고, 널 바이트로 인해 손실되는 것이 없기를 바라는 다음 파일을 실행해야 합니다.