【问题标题】:grep command works in command line, but not in bash script: get no such file or directory errogrep 命令在命令行中有效,但在 bash 脚本中无效:get no such file or directory 错误
【发布时间】: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


【解决方案1】:

请把脚本工作目录。运行 crontab 时,它将作为用户主目录作为默认路径。

#!/bin/bash
cd Your_Path
$host="user@host"
ssh $host
myinfo=\$(grep "word secondword" path/to/file)

【讨论】:

    猜你喜欢
    • 2014-11-09
    • 1970-01-01
    • 2017-02-14
    • 1970-01-01
    • 2014-12-16
    • 1970-01-01
    • 2018-09-30
    • 2016-07-27
    • 2020-01-20
    相关资源
    最近更新 更多