300行のGroovyスクリプトをtmpファイルにエコーバックできるBashスクリプトを実行する必要があります。 どうすればいいですか?大量のテキストをBashを使ってファイルにエコーする
私の現在の回避策は、スクリプトファイルをオンラインにしてダウンロードすることです。
300行のGroovyスクリプトをtmpファイルにエコーバックできるBashスクリプトを実行する必要があります。 どうすればいいですか?大量のテキストをBashを使ってファイルにエコーする
私の現在の回避策は、スクリプトファイルをオンラインにしてダウンロードすることです。
シェルスクリプト内で他のスクリプトを埋め込むためにヒアドキュメント構文を使用します。
cat > file.tmp <<'endmsg'
script goes here...
endmsg
貼り付けられたスクリプトに引用符を含まないシェル変数が含まれている場合は、cat操作の前に現在のシェルによって評価されます。引用符を付けると、ペーストされたとおりにリテラルとしてエコーされます。 –
ヒアドキュメントのアプローチは素晴らしいですが、単純にそれを使用することはできません。
これは、ナイーブヒアドキュメントのアプローチがペーストされます正確な内容に応じて、成功するか失敗する可能性があります。少なくとも驚きの原則に違反し、セミランダムので、危険であることを意味しています。
私は最初にbase64 uuencodeでコンテンツをキャプチャする方が好きです。これにより、コンテンツによって異なる動作の可能性が排除されるため、これについて再度考える必要はありません。
より安全なアプローチ:
uuencode -m whatever.sh whatever.sh >tmp
最後のスクリプトは次のようになります。
cat > file.tmp <<'_EOF'
begin-base64 644 whatever.sh
bHMgLWxSCmxzIC1sUgpscyAtbFIKbHMgLWxSCmxzIC1sUgpscyAtbFIKbHMg
LWxSCmxzIC1sUgpscyAtbFIKbHMgLWxSCmxzIC1sUgpscyAtbFIKbHMgLWxS
CmxzIC1sUgpscyAtbFIKbHMgLWxSCmxzIC1sUgpscyAtbFIKbHMgLWxSCmxz
IC1sUgpscyAtbFIK
====
_EOF
uudecode file.tmp
uuencodeされたデータの行は、あなたのヘレドックマーカーに一致する可能性はごくわずかです。あなたはおそらく60文字の長さのマーカーを使用しないでしょう:)最後の行は短くてもかまいませんし、マーカが発生してはならない文字(アンダースコアなど)を使用していない限り、uuencodedコンテンツが誤ってマーカと一致する可能性がありますベース64エンコーディング_EOF
は常に安全です。
'_EOF'
のようなheredocマーカーを引用してブロック内のシェル変数拡張を防ぐことも賢明です。 $
がbase64で使われていないので、base64でエンコードされたペイロードがシェル変数を間違って参照することはないと考えられますが、引用するとこの可能性は排除されます。また、シェル拡張を行う理由がない限り、常にheredocマーカーを引用する習慣を確立するのに役立ちます。これはコンテンツ依存の別の動作であり、明らかにランダムなので扱いにくいです。コンテンツブロック内でシェルを展開することがわからない限り、常にheredocマーカーを引用してください!
上記の手順は手動です。テンプレートを使用して同じことを自動化するのは簡単です。
sudo
を使用する必要のあるファイルに出力したい場合は、その答えは全く分かりません。
sudo tee /etc/php/conf.d/xdebug.ini > /dev/null <<'TXT'
zend_extension=xdebug.so
xdebug.remote_enable=on
xdebug.remote_autostart=on
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
TXT
あなたは単純に 'cat script> tmp'できないのですか? – Saphrosit