【发布时间】:2015-12-09 07:49:36
【问题描述】:
我知道已经有一些与此相关的问题,但无法使它对我有用!
所以我可以在命令行中运行 grep 并且它工作正常,但是如果我在 bash 脚本上执行此操作,则会出现以下错误:
grep: secondword:No such file or directory
我通过 ssh 连接到服务器,然后运行一些命令。服务器中grep的路径是/bin/grep,但是还是不行。下面是示例代码:
#!/bin/bash
$host="user@host";
ssh $host "
myinfo=\$(grep "word secondword" path/to/file);
"
我还验证了它没有在 Windows 中使用 Notepad++ 创建的 CR。有想法该怎么解决这个吗?
编辑:
按照建议,我对引号进行了以下更改:
#!/bin/bash
$host="user@host";
ssh $host "
myinfo=\$(grep \"word secondword\" path/to/file);
"
但现在我有一个非常奇怪的行为:它似乎列出了主服务器路径上的所有文件。对变量进行回显:
file1 file2 file 3
file4 file5 etc.
为什么会出现这种行为?我错过了什么吗?
【问题讨论】:
-
您需要转义第一个 grep 参数的引号或使用单引号。见unix.stackexchange.com/questions/30903/…
-
@4ae1e1 wrt "shitty syntax highlighting" 你知道你可以改变代码块中的语言,不是吗?
-
将
grep命令放在引号内,否则会在主服务器上执行。 -
@123 是的,我知道(这涉及到一个非常奇怪的 HTML 注释......),但就像所有其他语法荧光笔一样,有些东西它无法解析。我称这个特别的为垃圾,因为它的限制非常低;例如,祝你好运在引用的命令替换中引用。
-
你确定你需要一个变量的输出吗?常见的习惯用法是使用管道或临时文件。像这样在远程主机上分配一个变量肯定没有任何意义。
标签: bash shell ssh grep escaping