Macos 带变量的su和pipe

Macos 带变量的su和pipe,macos,shell,pipe,su,Macos,Shell,Pipe,Su,我正在编写一个shell脚本,希望通过管道将STDOUT传输到su命令中的一个文件。输出的文件需要由另一个用户拥有,因此使用su。但是,当要输出的文本和输出文件的名称是变量时,我无法让管道与su一起工作(请参见下面的示例) 我的解决方法是在不使用su的情况下通过管道连接到一个文件,然后将该文件发送给我需要的用户。然而,我想知道是否有一种使用su的“单步”方法 示例(仅用于说明): 如果将${file}放在双引号中,如本例所示,则会出现以下错误: bash: : No such file or d

我正在编写一个shell脚本,希望通过管道将STDOUT传输到su命令中的一个文件。输出的文件需要由另一个用户拥有,因此使用su。但是,当要输出的文本和输出文件的名称是变量时,我无法让管道与su一起工作(请参见下面的示例)

我的解决方法是在不使用su的情况下通过管道连接到一个文件,然后将该文件发送给我需要的用户。然而,我想知道是否有一种使用su的“单步”方法

示例(仅用于说明):

如果将
${file}
放在双引号中,如本例所示,则会出现以下错误:

bash: : No such file or directory
bash: ${file}: ambiguous redirect
如果删除
${file}
周围的双引号,则会出现以下错误:

bash: : No such file or directory
bash: ${file}: ambiguous redirect
尝试
susomeuser-c“echo\”${message}\“>${file}”


单引号内的变量不会展开。

Brilliant-它可以工作!这么快的回复,非常感谢!!您可以“重定向”到一个文件,并“管道”到一个进程。常规文件不是管道。请注意,您不需要这些转义的双引号,因此通过删除它们(例如[…]-c“echo$message>$file”)。通常,您需要它们,或者您需要将参数放在单引号中(这也行得通)。考虑调用<代码> RM< /代码>或其他任何命令,而不是<代码> ECHOR>代码>。如果不引用,
rm
将使用两个参数
Hello
World
调用,而您需要一个参数
Hello World
@Francis,欢迎您。请将答案标记为正确。@khachik解释了这个特殊情况,因为我喜欢保持代码干净,事情简单,但作为一个良好实践,我想你可以保留这些。在任何情况下,都不需要结尾处的分号。:-)