ファイルへのコマンドの書き込み

ファイルへのコマンドの書き込み

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前のテキストが標準入力として使用されるまで、1行をEOTそのまま入れてから、リダイレクトのcatためcatにもう一度吐き出します。シェルはEOT行の先頭に達するまで文書を読み続けるため、必要に応じて一度に複数の行を配置できます(EOT文字列でこれが発生した場合は別のものを使用してください。区切り文字は任意です)。

区切り文字が上部に引用されているため、ここでは文書1の本文への拡張は行われず、すべての文字がそのまま渡されます。Here-documents の動作は POSIX で指定されます。そして、すべてのシェルで動作します。

1場合によっては、いくつかの拡張を実行するいくつかの以前のバージョンのBashにバグがありました。しかし、ここでは発生しません。

答え2

代わりにエスケープ文字を使用してみてください。

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

答え3

文字列*2種見積もりは常に扱いにくいです。 3つの方法があります。

  • 両方の参照を交互に使用します。一重引用符(")の中に二重引用符(')を入れるか、その逆も同様です。

    まず、文字列を3つのセグメントに分割します。

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

    最初と3番目の部分には一重引用符は含まれず、2番目の部分には二重引用符は含まれません。その後、適切に引用してください。

    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部分は予想通りです。

関連情報