如何将 EOF 命令放在同一行以执行多个 shell 命令

如何将 EOF 命令放在同一行以执行多个 shell 命令

我想在 cron 作业中执行以下命令(与此类似) Cron 作业不接受这种命令模式。我也无法从外壳程序在同一行中运行。

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

让我知道是否有办法在单行中执行此操作。

我也尝试在每行末尾换行,但没有成功。

答案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"

在你的 cron 中。

来自 bash 手册页:

$'string' 形式的单词会被特殊处理。该单词扩展为字符串,并按照 ANSI C 标准指定的方式替换反斜杠转义字符。反斜杠转义序列(如果存在)按如下方式解码:

\a 警报(响铃)
\b 退格键
\e
\E 转义字符
\f
换页符 \n 换行符
\r 回车符
\t 水平制表符
\v 垂直制表
符 \ 反斜杠
\' 单引号
\" 双引号
\? 问号
\nnn 值为八进制值 nnn(一到三位数字)的八位字符
\xHH 值为十六进制值 HH(一位或两位十六进制数字)的八位字符
\uHHHH Unicode (ISO/IEC 10646 ) 值为十六进制值 HHHH(一到四个十六进制数字)的字符
\UHHHHHHHH 值为十六进制值 HHHHHHHH(一到八个十六进制数字)的 Unicode (ISO/IEC 10646) 字符
\cx 一个 control-x 字符

相关内容