linux - fish shell 和 ssh 远程命令的问题

标签 linux bash shell ssh fish

我在桌面上使用 fish shell 。

我们使用许多在 docker 中运行 nginx 的服务器。我尝试创建一个函数,以便我可以通过 ssh 连接到服务器,然后登录到 docker。

问题是 fish 提示命令中的 $,但该命令是要在远程服务器(运行 bash)上执行的命令,而不是在我运行 fish 的机器上执行的命令。我简化了脚本以使其更易于查看。

config.fish 片段

function ssh-docker-nginx
ssh -t sysadmin@10.10.10.10 "sudo bash && docker exec -it $(docker ps | grep -i nginx | awk '{print $1}') bash"
end

fish 错误:

$(...) is not supported. In fish, please use '(docker)'.
~/.config/fish/config.fish (line 59): ssh -t sysadmin@10.10.10.10 "sudo bash && docker exec -it $(docker ps | grep -i nginx | awk '{print $1}') bash"
                                                                                            ^
from sourcing file ~/.config/fish/config.fish
called during startup

有没有办法让 fish 忽略这个?

最佳答案

您需要对该参数进行单引号。

在双引号 (") 中,fish 将尝试展开以 $ 开头的所有内容,因此它会看到 $(然后为它打印错误。但它也会在你给 awk 的参数中看到 $1 并展开它。

当你希望单引号转到被调用的命令时(就像这里,你希望 awk 的参数是单引号,因为这将通过 bash 的扩展),你需要用 \

尝试

ssh -t sysadmin@10.10.10.10 'sudo bash && docker exec -it $(docker ps | grep -i nginx | awk \'{print $1}\') bash'

关于linux - fish shell 和 ssh 远程命令的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37784293/

相关文章:

linux - 如何配置 linux 路由以将数据包发送出一个接口(interface),通过网桥并进入同一个盒子上的另一个接口(interface)

bash - 仅使用 awk 在两个正则表达式之间打印

regex - Bash 脚本 sed -e

linux - 为什么我运行脚本时出现错误。我该如何修复它?

linux - 如何从 bash 制作批处理脚本

BASH:排除 "find"命令中的目录

bash - 是否可以在bash脚本中剪切特定列并显示该列重复出现的次数?

linux - 将具有特定扩展名的文件符号链接(symbolic link)到 linux 中的另一个文件夹

linux - 在一组行之间排序

ruby - 当搜索为空时如何在Linux中查找程序