다음 줄이 포함된 스크립트를 발견했습니다.
java_version=$($JAVA_HOME/bin/java -version 2>&1 | awk -F '"' '/version/ {print $2}' | cut -d '_' -f 1,3)
다음은 테스트입니다.
if [[ -n "$java_version" ]]; then
...
명령줄에서 호출하면 테스트가 성공합니다. Java 애플리케이션에서 호출하면 실패합니다.
몇 가지 유용한 참고 사항:
- 스크립트의 첫 번째 줄은 입니다
#!/usr/bin/env bash
. - 테스트 성공은 명령줄에서 호출할 때
java_version
null이 아님을 의미합니다. 추가로 확인하기 위해echo
테스트하기 전에 일부 외부 파일에 값을 쓰고java_version
거기에서 값을 찾습니다. - 이중 괄호를 단수로 변경했고 테스트는 명령줄과 Java 애플리케이션에서 스크립트를 성공적으로 호출했습니다.
- 저는 GNU/Linux Ubuntu 18.04, bash 버전 4.4.20, Java 8(Oracle JDK)을 실행하고 있습니다.
이 동작 변화의 원인이 무엇인지에 대한 아이디어가 있습니까?
답변1
실행 중인 셸을 찾기 위해 스크립트에 다음 줄을 추가했습니다.
ps -p $$ > /path/to/some_file
/bin/sh
실행 중인 쉘이 이중 대괄호 구문을 지원 하지 않는 것으로 나타났습니다 . 이중 괄호는 일부 셸(원천).
모든 크레딧은 내 게시물에 댓글을 단 사람들에게 돌아갑니다.