文字列文字列内で変数を印刷する方法がわかりません。
次の変数なしで起動しましたが、うまくいきました。
#!/bin/bash
ssh 1.1.1.1 $'sudo -H -u apache bash -c \'cd ~/html; echo development > stuff.text\''
私のサーバーにログインすると、ファイルに.perfectという単語が含まれている1.1.1.1
ことがわかります。stuff.text
development
その後、次のbashスクリプトを作成しました。
#!/bin/bash
BRANCH=development
ssh 1.1.1.1 $'sudo -H -u apache bash -c \'cd ~/html; echo ${BRANCH} > stuff.text\''
ただし、このbashスクリプトを実行すると空のstuff.text
ファイルが生成されます。また、次のコマンドを試しましたが、両方とも構文/構文解析エラーが発生しました。
ssh 1.1.1.1 $`sudo -H -u apache bash -c 'cd ~/html; echo ${BRANCH} > stuff.text'`
ssh 1.1.1.1 ${`sudo -H -u apache bash -c 'cd ~/html; echo ${BRANCH} > stuff.text'`}
ssh 1.1.1.1 ${sudo -H -u apache bash -c 'cd ~/html; echo ${BRANCH} > stuff.text'}
ssh 1.1.1.1 ${"sudo -H -u apache bash -c 'cd ~/html; echo ${BRANCH} > stuff.text'"}
別の文字列内の文字列内に変数を作成するには?
答え1
不必要に複雑な表記法を使用しています。ここではまったく必要では$
なくssh
、リモートサーバーでコマンドとして実行される文字列を受け入れます。cd
どこにも行く必要はありません。この試み:
#!/bin/bash
## avoid CAPS for shell variable names.
branch=development
ssh 1.1.1.1 "sudo -H -u apache bash -c 'echo $branch > ~/html/stuff.text'"
答え2
多くの試行錯誤の末、これが効果があることがわかりました。
#!/bin/bash
BRANCH=development
ssh 1.1.1.1 $"sudo -H -u apache bash -c 'cd ~/html; echo ${BRANCH} > stuff.text'"
development
これでファイルの単語を見ることができます~/html/stuff.text