su和带变量的管道

时间:2011-12-29 09:34:45

标签: macos shell pipe su

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

我的解决方法是在不使用su的情况下管道到文件,然后将该文件chown给我需要的用户。但是,我想知道是否有一个“单步”方式使用su?

示例(仅供说明):

#!/bin/sh

message="Hello World";
file="/tmp/HelloWorld.txt";

su someuser -c 'echo "${message}" > "${file}"';

如果我将${file}放在双引号中,就像在此示例中一样,我收到以下错误:

bash: : No such file or directory

如果我删除${file}周围的双引号,则会收到以下错误:

bash: ${file}: ambiguous redirect

1 个答案:

答案 0 :(得分:1)

尝试su someuser -c "echo \"${message}\" > ${file}";

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