GNU/Linux >> Linux の 問題 >  >> Linux

<<EOF >> コードを含むファイルを cat する方法は?

これは機能するはずです。テストしたところ、期待どおりに機能しました。拡張、置換、または何を持っているかは発生しませんでした.

cat <<< '
#!/bin/bash
curr=`cat /sys/class/backlight/intel_backlight/actual_brightness`
if [ $curr -lt 4477 ]; then
  curr=$((curr+406));
  echo $curr  > /sys/class/backlight/intel_backlight/brightness;
fi' > file # use overwrite mode so that you don't keep on appending the same script to that file over and over again, unless that's what you want. 

以下を使用することもできます。

cat <<< ' > file
 ... code ...'

また、<< EOF などのヒアドキュメントを使用する場合は注意が必要です。 、置換、変数展開などが行われます。したがって、次のようにします:

cat << EOF > file
cd "$HOME"
echo "$PWD" # echo the current path
EOF

常に変数 $HOME の展開になります そして $PWD .ホームディレクトリが /home/foobar の場合 現在のパスは /home/foobar/bin です 、 file 次のようになります:

cd "/home/foobar"
echo "/home/foobar/bin"

予想の代わりに:

cd "$HOME"
echo "$PWD"

最小限の変更のみが必要です。 << の後のヒアドキュメント区切り文字を一重引用符で囲みます .

cat <<'EOF' >> brightup.sh

または同等にバックスラッシュでエスケープします:

cat <<\EOF >>brightup.sh

あなたが発見したように、引用しないと、ヒアドキュメントは変数置換を受け、バッククォートが評価されます.

すべてではなく一部の値を展開する必要がある場合は、防止したい値を個別にエスケープする必要があります。

cat <<EOF >>brightup.sh
#!/bin/sh
# Created on $(date # : <<-- this will be evaluated before cat;)
echo "\$HOME will not be evaluated because it is backslash-escaped"
EOF

生産します

#!/bin/sh
# Created on Fri Feb 16 11:00:18 UTC 2018
echo "$HOME will not be evaluated because it is backslash-escaped"

@fedorqui によって提案されたように、ここに man bash の関連セクションがあります :

<ブロック引用>

ドキュメントはこちら

このタイプのリダイレクトは、区切り文字のみを含む (末尾の空白を含まない) 行が表示されるまで、現在のソースから入力を読み取るようにシェルに指示します。その時点までに読み取られたすべての行は、コマンドの標準入力として使用されます。

ヒアドキュメントの形式は次のとおりです:

      <<[-]word
              here-document
      delimiter

word では、パラメーター展開、コマンド置換、算術展開、またはパス名展開は実行されません。 word の文字が引用符で囲まれている場合、区切り文字は word の引用符を削除した結果であり、ヒアドキュメントの行は展開されません。 単語が引用符で囲まれていない場合、ヒアドキュメントのすべての行がパラメータ展開、コマンド置換、算術展開の対象となります .後者の場合、文字シーケンス \<newline> は無視され、\ 文字 \ を引用するために使用する必要があります 、 $ 、および ` .


Linux
  1. 数千を含むフォルダから100ファイルを移動する方法は?

  2. Awkからファイルをキャットする方法は?

  3. Linuxでファイルの名前を変更するにはどうすればよいですか?

  1. cat << EOFはbashでどのように機能しますか?

  2. ファイルをスパースにする方法は?

  3. ファイル内で \n を grep する方法

  1. ファイルをその場でソートする方法

  2. ファイルを cat してコメント行を削除するにはどうすればよいですか?

  3. ファイルをトランザクション的にコピーする方法は?