2016-06-13 5 views
1

私のデスクトップに魚のシェルを使用しています。魚のシェルとsshのリモートコマンドに関する問題

ドッカー内でnginxを実行する多くのサーバーを使用しています。私は関数を作成しようとしましたので、サーバーにsshしてからドッキングすることができます。

問題は魚がコマンドの$について不平を言っていますが、コマンドは魚を実行しているマシンではなく、リモートサーバー(実行中のbash)で実行されるコマンドです。スクリプトを簡略化して見やすくしました。魚はこれを無視するために取得する方法はあり

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

config.fishは

function ssh-docker-nginx 
ssh -t [email protected] "sudo bash && docker exec -it $(docker ps | grep -i nginx | awk '{print $1}') bash" 
end 

魚のエラーをスニペット?

答えて

4

あなたはその引数を一重引用符で囲みたいと思うでしょう。

魚は$で始まるものすべてを展開しようとするため、$(が表示され、エラーが表示されます。しかし、awkの引数に$1が表示され、それを展開します。

シングルクォートを呼び出されたコマンド(ここでは、awkの引数がシングルクォートになるようにbashの拡張を行うため)の場合、引用符をエスケープする必要があります\

シングル/二重引用符について上記の偉大なアドバイスやヒントについて

ssh -t [email protected] 'sudo bash && docker exec -it $(docker ps | grep -i nginx | awk \'{print $1}\') bash' 
0

感謝を試してみてください。残念ながら、awkのエスケープされた引用符は、うまくsshに渡されませんでした。

function ssh-docker-nginx 
cat docker-bash.sh | ssh -t -t [email protected] 
end 

# docker-bash.sh 
#!/bin/bash 
sudo chmod 777 /var/run/docker.sock 
sudo docker exec -it $(docker ps | grep -i nginx | awk '{print $1}') bash 

は、さまざまなオプションの後、私は(力の端末を必要とする)このアプローチで決着しました

関連する問題