複数のシェルコマンドを実行するためにEOFコマンドを同じ行に入れる方法

複数のシェルコマンドを実行するためにEOFコマンドを同じ行に入れる方法

cronジョブで次のコマンド(これと同様)を実行したいと思います。 Cronジョブはこのコマンドパターンを許可しません。また、同じ行のシェルで実行することはできません。

cat > file << EOF
first line
second line
third line
EOF

1行にできる方法がある場合は教えてください。

私も成功せずに各行の終わりに改行しようとしました。

答え1

これがファイルにテキストを置く唯一の方法ではありません。次のことができます。

$ printf '%s\n' 'first line' 'second line' 'third line' > file

その後、次のものがfile含まれます。

first line
second line
third line

コマンドに引数として提供できる文字列の数と長さには制限があります。これらの制限が大きい傾向があるLinuxでは問題になりませんが、他のUnixシステムや組み込み環境ではあまり寛容ではありません。

答え2

$'\n'Bashで新しい行を表すために使用できます。

たとえば、次のように使用できます。

bash -c "cat <<< first\ line$'\n'second\ line$'\n'third\ line > file"

あなたのクローンに。

Bashのマニュアルページから:

$ 'string'形式の単語は特別に扱われます。ワードは、ANSI C規格で指定されているように置き換えられたバックスラッシュエスケープ文字を使用して文字列に展開されます。バックスラッシュエスケープシーケンスがある場合は、次のようにデコードされます。

\a警告(リング)
\bバックスペース
\e
\Eエスケープ文字
\f
フォームフィード\n改行\
rキャリッジリターン
\t水平タブ
\v垂直タブ
\バックスラッシュ
\ '一重引用符
\"二重引用符
\?疑問符
\ nnn値が8進数値nnn(1〜3桁)の8ビット文字 \
xHH値は、16進数値です。 16進値があります。value HHHH(1〜4桁 の
16進数)\ UHHHHHHHH文字
には、16進値のHHHHHHHH(1〜8桁の16進数)がありますUnicode(ISO / IEC 10646)

関連情報