Shell-Script

將 bash 腳本嵌入另一個 bash 腳本的正確方法

  • April 8, 2022

請建議或更正以下程式碼,或盡可能使其更簡單。

該文件必須嵌入在單個 shell 腳本文件中。

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
#!/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"

更具可讀性的是heredoc:

#!/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"

引用自:https://unix.stackexchange.com/questions/698402