我不知道如何在字符串的字符串中打印变量。
我一开始没有像这样的变量,它工作得很好:
#!/bin/bash
ssh 1.1.1.1 $'sudo -H -u apache bash -c \'cd ~/html; echo development > stuff.text\''
当我登录到我的服务器时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