我想从Ruby运行以下shell命令,它将一个字符串复制到剪贴板(在OS X上),'n'是在字符串引起的字符串断点之后抑制echo:
echo -n foobar | pbcopy
Run Code Online (Sandbox Code Playgroud)
- > 工作,很好,现在剪贴板包含"foobar"
我已尝试过以下内容,但所有这些都会将选项'-n'复制到剪贴板中:
%x[echo -n 'foobar' | pbcopy]
%x[echo -n foobar | pbcopy]
system "echo -n 'foobar' | pbcopy"
system "echo -n foobar | pbcopy"
exec 'echo -n "foobar" | pbcopy'
`echo -n "foobar" | pbcopy`
IO.popen "echo -n 'foobar' | pbcopy"
Run Code Online (Sandbox Code Playgroud)
实现这个目标的正确方法是什么?
你的问题-n只有bash内置echo命令才能理解; 当你说%x[...](或者你的任何其他变体)时,命令被输入到/bin/sh它将像POSIX shell一样,即使它确实如此/bin/bash.解决方案是将shell命令显式地提供给bash:
%x[/bin/bash -c 'echo -n foobar' | pbcopy]
Run Code Online (Sandbox Code Playgroud)
当然,您需要小心引用任何foobar实际情况.该-c开关基本上告诉/bin/bash你给它一个内联脚本:
-c string
如果存在-c选项,则从字符串中读取命令.如果字符串后面有参数,则将它们分配给位置参数,从$ 0开始.
因为echo在不同的shell和in中表现不同/bin/echo,所以建议您使用printf.
没有新行:
%x[printf '%s' 'foobar' | pbcopy]
Run Code Online (Sandbox Code Playgroud)
换行:
%x[printf '%s\n' 'foobar' | pbcopy]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3073 次 |
| 最近记录: |