>>
파일에 명령을 추가하는 완전한 쉘 스크립트를 작성하고 싶습니다 . 예를 들어, 편집기를 사용하여 작성된 것처럼 다음 스크립트를 고려하십시오.
echo Hello World, done
echo please enter the first number
read num1
echo please enter the second number
read num2
echo $num1 plus $num2 is `expr $num1 + $num2`
터미널 창에서 echo echo Hello World, "done" >> file.sh
파일에 모든 줄을 쓰려고 입력을 시도했습니다. 파일을 실행할 때 터미널이 "done" 키워드를 고려하지 않도록 "done" 주위에 따옴표를 붙였습니다. 그러나 파일이 올바르게 수행되었는지 확인하면 "done" 키워드에 따옴표가 없습니다. 그리고 위 코드의 마지막 줄은 터미널 창에 입력하고 파일에 추가하면 파일이 모두 표시됩니다 . 왜 변수와 표현식이 파일에 추가되지 않는지 echo plus is
궁금합니다 . expr
기본적으로 터미널 창에서 위의 코드를 다시 만들고 싶습니다. Ubuntu 12.04를 실행 중이고 bash 버전은 4.2.24입니다.
답변1
훌륭합니다. 쉘은 파일에 추가하기 전에 문자를 해석합니다.
echo echo Hello World, "done" >> file.sh
쉘 해석 "
, 표준에서 제거 echo
. 따라서 이를 탈출해야 합니다.
echo echo Hello World, \"done\" >> file.sh
또는 더 간단하게는 전체 내용을 에 포함시킵니다 '
.
echo 'echo Hello World, "done"' >> file.sh`
그렇게 말했는데 무슨 말인지 잘 모르겠네요
파일을 실행할 때 터미널이 "완료" 키워드를 고려하지 않는지 확인하세요.
done
a 뒤의 A는 echo
의미가 없습니다. 새 스크립트는 단일 텍스트만 인쇄합니다 done
. 테스트해보세요!
마찬가지로,
echo $num1 plus $num2 is `expr $num1 + $num2`
쉘은 변수를 해석하고expr
앞으로파일에 첨부됩니다. 다시 말하지만, '
.
echo 'echo $num1 plus $num2 is `expr $num1 + $num2`' >> file.sh
그렇게 말했는데, 왜 그런 짓을 하려는지 모르겠습니다. 그냥 텍스트 편집기를 사용하세요. '
스크립트에서 텍스트를 사용 하려는 경우 이는 문제가 될 수 있습니다.
답변2
다음 구조를 시도해 보세요.
$ cat > file.sh << "EOF"
echo Hello World, done
read num1
echo please enter the second number
read num2
echo Sum of $num1 and $num2 is `expr $num1 + $num2`
EOF
처음부터 리눅스스크립팅부터 파일 생성까지 모든 것이 이 방법을 사용합니다. done
재정의된 경우 EOF
Sparhawk에서 권장하는 대로 이스케이프 처리하는 것을 고려하세요.
답변3
리디렉션을 사용하여 터미널의 대화형 셸(셸 스크립트)에서 텍스트 파일을 만드는 가장 쉬운 방법은 다음을 수행하는 것입니다.
$ cat >filename
...그런 다음 원하는 텍스트를 붙여넣거나 입력을 시작합니다 ( >>
대신>
추가의이미 존재하는 파일로). 완료되면 을 누릅니다 Ctrl+D.
추가 보너스로, 쉘은 이런 방식으로 텍스트 파일에 붙여넣거나 입력한 내용을 달리 해석하지 않습니다. 한 줄 삽입 또는 여기에 여러 줄 삽입 문서를 사용하려는 경우 echo
셸이 문서 콘텐츠에서 변수, 이스케이프 시퀀스 등을 확장하지 못하도록 올바른 따옴표를 사용하여 텍스트를 보호해야 합니다.
스크립트 내에서 스크립트를 생성하려면 여기에 참조된 문서를 사용하세요.
cat <<'END_SCRIPT' >filename
script
goes
here
END_SCRIPT
귀하의 질문에있는 문제는 단순히 echo
줄 앞에 추가 할 때 추가 예방 조치를 취하지 않는 한 나머지 줄은 여전히 쉘에 의해 해석된다는 것입니다.