为什么capistrano解释一个标志通过命令传递给`run`作为输入?

时间:2010-12-12 23:21:40

标签: ruby-on-rails ruby deployment capistrano

我试图这样做:

run "echo -n 'foo' > bar.txt"

并且bar.txt的内容最终为:

-n foo \n

\n表示实际换行符)

我使用run运行其他命令,例如rm -rf,据我所知,它运行正常。

2 个答案:

答案 0 :(得分:1)

好像-n标志没有被shell解释为标志。如果从命令行执行echo -Y hi,输出将为-Y hi。

答案 1 :(得分:1)

我刚在man echo中找到了这个:

  

某些shell可能提供内置的echo命令,该命令与此实用程序类似或相同。最值得注意的是,sh(1)中的内置回声不接受-n选项。请参阅builtin(1)手册页。

我的bash版本内置echo,但似乎尊重-n标志。看起来部署机器上的shell没有,在这种情况下,使用echo二进制文件的完整路径可能会在此处执行您想要的操作:

run "/bin/echo -n 'foo' > bar.txt"