我在桌面上使用 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/