首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法通过ssh运行包含单引号的命令

无法通过ssh运行包含单引号的命令
EN

Stack Overflow用户
提问于 2019-11-15 17:26:28
回答 2查看 49关注 0票数 0

我可以在一台机器上执行以下命令(让我们称它为机器A)。

代码语言:javascript
复制
find /foo/bar -name "*" -type f -exec md5sum {} + | awk '{print $1}' | sort

此命令列出/foo/bar下的文件的md5

但是,当我将此命令附加到ssh命令中时

代码语言:javascript
复制
ssh -i ~/.ssh/my_key my_user@123.123.123.123 'find /foo/bar -name "*" -type f -exec md5sum {} + | awk '{print $1}' | sort'

它会生成以下错误

代码语言:javascript
复制
awk: cmd. line:1: {print
awk: cmd. line:1:       ^ unexpected newline or end of string

ssh是计算机A的IP地址。123.123.123.123命令从另一台计算机运行。

是否可以将该命令附加到ssh命令中?

我已经尝试了以下命令,它也不起作用。

代码语言:javascript
复制
ssh -i ~/.ssh/my_key my_user@123.123.123.123 'find /foo/bar -name "*" -type f -exec md5sum {} + | awk \'{print $1}\' | sort'
EN

回答 2

Stack Overflow用户

发布于 2019-11-15 17:46:08

awk之后的单引号终止了find之前的左单引号。

在您的示例中,您的命令中没有执行参数扩展。因此,最简单的方法是在ssh命令中使用双引号。

代码语言:javascript
复制
ssh -i ~/.ssh/my_key my_user@123.123.123.123 "find /foo/bar -name '*' -type f -exec md5sum {} + | awk '{print $1}' | sort"

另一种方法是将awk参数周围的每个'替换为'"'"',但这很难读懂。

票数 1
EN

Stack Overflow用户

发布于 2019-11-16 01:20:55

单引号字符串中不能出现(甚至转义)单引号。但它们可以出现在ANSI引用的字符串中(正确转义)。

代码语言:javascript
复制
ssh -i ~/.ssh/my_key my_user@123.123.123.123 \
 $'find /foo/bar -name "*" -type f -exec md5sum {} + | awk \'{print $1}\' | sort'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58873889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档