문자열 문자열 내에서 변수를 인쇄하는 방법을 모르겠습니다.
다음과 같은 변수 없이 시작했는데 잘 작동했습니다.
#!/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