Tomcat 웹앱에 무언가를 설치하려고 합니다. 이것이 내 목표의 시작입니다 install
.
tomcat=`locate --regex "^(/var/lib/tomcat[0-9]{1,2}/webapps/[^/]+/)AppName\.html$" -l 1 | tr -d "\n"`
echo "Tomcat: $tomcat"
# If the string is empty (no path matched) or the path does not exists (that should never really happen)
# terminate
if [ -z "$tomcat" ] || [ ! -f "$tomcat" ]; then
echo "Application not found on filesystem."
exit 404
fi
그러나 결과는 다음과 같습니다.
tomcat=`locate --regex "^(/var/lib/tomcat[0-9]{1,2}/webapps/[^/]+/)AppName\.html -l 1 | tr -d "\n"`
/bin/sh: 1: Syntax error: Unterminated quoted string
makefile:77: recipe for target 'install' failed
make: *** [install] Error 2
다른 사람들은 `
(백틱)을 사용하여 stdout
명령 출력을 변수에 할당할 수 있다고 주장합니다. 나는 심지어 tr -d "\n"
모든 개행 문자를 제거하곤 했는데 어쩌면 나타날 수도 있었습니다. 그리고 코드는 셸에서 완벽하게 실행됩니다.
XXXXX@debianvirtualbox:~$ tomcat=`locate --regex "^(/var/lib/tomcat[0-9]{1,2}/webapps/[^/]+/)AppName\.html$" -l 1 | tr -d "\n"`
XXXXX@debianvirtualbox:~$ echo $tomcat
/var/lib/tomcat8/webapps/websight/AppName.html
또 고쳐야 할 점이 있나요?
답변1
$
기호는 변수 표시자로 해석되기 때문에 makefile에서 문제를 일으키는 것으로 악명이 높습니다. 여기에서는 첫 번째 행의 값을 두 배로 늘립니다.
AppName\.html$$"
당신은 또한 볼 수 있습니다다른 게시물makefile 이스케이프 문제에 대해 자세히 알아보세요.