Ruby System命令没有采用`echo -n`

时间:2017-03-13 16:19:10

标签: ruby bash

我尝试使用system命令将文本输出到文件。我使用echo -n并传递-n,因此它不会自动在文件中创建换行符。这是我使用的命令: system("echo -n \"text for the file\" >> path/to/file.txt")

当我检查文本文件时,我得到的输出是: -n text for file

如果我在终端中运行相同的命令,我就不会得到-n

为什么不接受-n作为论据?

2 个答案:

答案 0 :(得分:4)

echo -n不可移植。请改用printf来打印字符串。

system("printf 'text of the file' >> path/to/file.txt")

具体来说,POSIX规范允许符合echo的实现支持-n选项,但不要求它或定义它应该做什么。您的system调用正在使用未实现dash的shell(可能是-n),并将其视为写入标准输出的常规参数。

答案 1 :(得分:1)

除此之外,chepner的有用答案,因为system()调用echo调用-n的本地实现而未实现FreeBSD功能,您可以调用GNU或者基于echo的{​​{1}}安装明确安装如下,

Mac OS FreeBSD echo版本的/bin/echo安装为system("/bin/echo -n \"text for the file\" >> path/to/file.txt") ,您可以将其用作

echo

作为附注,您可以先运行which echo来查看是否安装了{{1}}。