私はそうのようにbashにコマンドを送信アプリを持っている:ネストされたbashコマンドの引用の問題
/bin/bash -c "<command goes here>"
これは素晴らしい作品が、私はもう少し複雑なコマンドを使用して、問題を直撃しています。このコマンドは、SSHサーバーからタールを取得し、pv
の進行状況バーを表示して、それをローカルユーザーのディレクトリに保存します。コマンドラインでこのコマンドを実行
su -c "ssh -p 1234 [email protected] 'cd /home/ && tar -cf - remoteuser/' | pv > /home/staging/localuser/staging.tar" localuser
手動で素晴らしい作品が、私は私の人生のために/bin/bash/
への引数としてこれを渡す方法を動作することはできません。
私が試してみました:別の構文を使用して
/bin/bash -c "su -c "ssh -p 1234 [email protected] 'cd /home/ && tar -cf - remoteuser/' | pv > /home/staging/localuser/staging.tar" localuser"
そして様々な組み合わせを、私はちょうどそれが働いていない理由を私は本当に理解していないと推測しています。
私はシンプルな例にそれを分解して内部コマンドは、ホームパスを取得します。この単純な例のように単一引用符を使用している場合、それは動作します実現しています
bash -c "su -c 'cd ~ && pwd' localuser"
が、大きなコマンドでそれが失敗していることを試みます:
/bin/bash -c "su -c 'ssh -p 1234 [email protected] 'cd /home/ && tar -cf - remoteuser/' | pv > /home/staging/localuser/staging.tar' localuser"
それはno passwd entry for user /home
はそうコマンドは、私は推測するまで壊れつつあると言うが、この問題を解決する方法がわからない、ネストされた単一引用符が、イムを買います。
私は単一引用符外に二重引用符入れてみました:
/bin/bash -c "su -c 'ssh -p 1234 [email protected] "'cd /home/ && tar -cf - remoteuser/'" | pv > /home/staging/localuser/staging.tar' localuser"
をしかし、それはそれは、ディレクトリを見つけることができないと言います。私はちょうどコマンドを微調整する必要があるように見えますが、私はそれを理解することはできません誰も助けることができますか?
通常、プログラムが "bashにコマンドを送る"とき、プログラムが 'execl("/bin/bash "、" -c "、yourcommand、NULL);を起動することを意味します。つまり、文字列をエスケープしないでください。 'bash -c something'コマンドを書こうとしていないのは、他のシェルを経由していることを意味するからです。 –