다음 코드를 제안하거나 수정하거나 가능하면 더 간단하게 만드십시오.
이 파일은 단일 쉘 스크립트 파일에 포함되어야 합니다.
Embedded.sh
#!/bin/bash
echo '#!/bin/bash
read input
while [[ $input -eq Y ]]; do echo hi ; done ' > /tmp/test.sh
chmod ugo+w /tmp/test.sh ; chmod ugo+w /tmp/test.sh ; chmod ugo+x /tmp/test.sh
konsole -e sh /tmp/test.sh
rm /tmp/test.sh
답변1
#!/bin/bash
out=/tmp/script.sh
data='
IyEvYmluL2Jhc2gKcmVhZCBpbnB1dAp3aGlsZSBbWyBcJGlucHV0IC1lcSBZIF1dOyBkbyAj
IG5vdGUgdGhlIGVzY2FwZWQgJCBoZXJlCiAgZWNobyBoaQpkb25lCg=='
base64 -d <<<"$data" >"$out" &&
chmod +x "$out"
포함된 스크립트를 인코딩합니다. 여기서는 base64 인코딩을 사용하고 있습니다. 더 큰 스크립트의 경우 gzip
인코딩을 사용하기 전에 데이터를 압축한 base64
다음 디코딩을 사용한 후에 압축을 푸십시오 base64 -d <<<"$data" | gzip -cd >"$out"
.
답변2
구분 기호가 더 읽기 쉽습니다.
#!/bin/bash
tempscript="$(mktemp)"
trap 'rm "$tempscript"' EXIT
cat > "$tempscript" << EOF
#!/bin/bash
read input
while [[ \$input -eq Y ]]; do # note the escaped $ here
echo hi
done
EOF
chmod u+x "$tempscript"
"$tempscript"