작은 따옴표와 큰 따옴표가있는 인수를 쉘 스크립트에 전달

지역

작은 따옴표와 큰 따옴표가있는 인수를 쉘 스크립트에 전달하고이 인수로 실행하려고합니다. 에코에서 올바르게 인쇄되지만 명령의 경우 "Unterminated quoted value"로 표시됩니다.

스크립트 및 인수 전달 방법을 참조하십시오.

[root@geopc]/root# ./myscript.sh 'localhost:9199/jmxrmi -O java.lang:type=GarbageCollector,name="PS MarkSweep" -A CollectionCount -K duration'


#!/bin/bash
out=`/usr/lib64/nagios/plugins/check_jmx -U service:jmx:rmi:///jndi/rmi://$1`
echo $1
echo $out

실행 후 다음과 같이 출력됩니다.

$ 1 : localhost : 9199 / jmxrmi -O java.lang : type = GarbageCollector, name = "PS MarkSweep"-A CollectionCount -K 기간

$ out : JMX CRITICAL 종결되지 않은 따옴표 값

쉘 스크립트에서 우리는 $ 1의 값을 하드 코딩 한 다음 실행하면 올바른 결과를 얻습니다.

다음과 같이 인수 전달을 시도했습니다.

./myscript.sh 'localhost:9199/jmxrmi -O java.lang:type=GarbageCollector,name=\"PS MarkSweep\" -A CollectionCount -K duration'

이 경우 오류는 다음과 같습니다. JMX CRITICAL 속성 값 부분의 잘못된 문자 ' "'

./myscript.sh 'localhost:9199/jmxrmi -O java.lang:type=GarbageCollector,name="\"PS MarkSweep\"" -A CollectionCount -K duration'

이 경우 오류는 JMX CRITICAL입니다.

그러니 누구든지 저를 도와주세요.

그 다른 남자

문제는 변수의 따옴표와 이스케이프가 스크립트의 따옴표와 동일하게 해석 될 것으로 예상한다는 것입니다.

Java 용어로 이것은 예상과 동일합니다.

String input="\"foo\", \"bar\"";
String[] parameters = { input };

다음과 동일합니다.

String[] parameters = { "foo", "bar" };

두 언어의 실제 해결책은 입력을 요소의 배열로 만드는 것입니다.

#!/bin/bash
out=`/usr/lib64/nagios/plugins/check_jmx -U service:jmx:rmi:///jndi/rmi://"$1" "${@:2}"`
echo "$1"
echo "$out"

다음 실행 :

./myscript.sh localhost:9199/jmxrmi -O java.lang:type=GarbageCollector,name="PS MarkSweep" -A CollectionCount -K duration

하나!!

이를 위해서는 규율과 이해가 필요합니다.

이것이 드롭 인 솔루션이 아니라는 것을 알 수 있습니다. 이제 스크립트가 여러 매개 변수로 호출되고 있습니다. 이것은 매우 엄격한 요구 사항입니다. 이 스크립트가 다른 프로그램에서 호출되는 경우 해당 프로그램도이를 인식해야합니다. 종단 간 처리되어야합니다.

예를 들어이를 구성 파일에 저장하면 목록으로 역 직렬화 할 수있는 방식으로 문자열을 직렬화하는 것은 사용자의 책임입니다. 당신은 그것이 잘 될 것이라고 기대할 수 없습니다. Java와 달리 문자열과 목록을 혼동 할 때 컴파일러 경고가 없습니다.

이것이 당신이 관여하고 싶지 않은 것이 아니라면 대신 사용할 수 있습니다 eval. 이것은 보안 및 견고성 문제로 인해 나쁜 습관이지만 때로는 충분합니다.

yourcommand="/usr/lib64/nagios/plugins/check_jmx -U service:jmx:rmi:///jndi/rmi://$1"
echo "$yourcommand"  # Make sure this writes the right command
eval "$yourcommand"  # This will execute it as if you copy-pasted it

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

따옴표와 큰 따옴표가있는 인수를 bash 스크립트에 전달

분류에서Dev

큰 따옴표가 포함 된 인수를 쉘 스크립트 함수에 전달하는 방법은 무엇입니까?

분류에서Dev

자바 스크립트에 C # 문자열을 전달할 때 작은 따옴표와 큰 따옴표를 우아하게 이스케이프하는 방법

분류에서Dev

쉘 스크립트에서 큰 따옴표로 변수 값을 전달하는 방법

분류에서Dev

자바 스크립트에서 작은 따옴표와 큰 따옴표를 사용하는 방법

분류에서Dev

쉘 스크립트의 줄에 큰 따옴표를 추가하는 방법은 무엇입니까?

분류에서Dev

자바 스크립트 : 왜 작은 따옴표와 큰 따옴표가 여전히 함께 존재합니까?

분류에서Dev

작은 따옴표와 큰 따옴표 안에 이미있는 텍스트를 어떻게 인용 할 수 있습니까?

분류에서Dev

작은 따옴표와 큰 따옴표가 모두있는 표현식을 어떻게 에코합니까?

분류에서Dev

큰 따옴표로 묶인 bash 스크립트 인수를 PHP CLI 스크립트에 전달

분류에서Dev

이전 VB 스크립트는 큰 따옴표 안에 큰 따옴표를 이스케이프하는 방법

분류에서Dev

이전 VB 스크립트는 큰 따옴표 안에 큰 따옴표를 이스케이프하는 방법

분류에서Dev

R에서 큰 따옴표와 작은 따옴표 (항상)를 바꿀 수 있습니까?

분류에서Dev

쉘 스크립트에서 큰 따옴표를 백 슬래시 큰 따옴표로 대체하십시오.

분류에서Dev

자바 스크립트는 작은 따옴표를 큰 작은 따옴표 문제로 바꿉니다.

분류에서Dev

JSON 배열에서 큰 따옴표와 작은 따옴표를 이스케이프하는 방법

분류에서Dev

큰 따옴표와 작은 따옴표가있는 문자열을 EF에서 SQL로 저장

분류에서Dev

bash 스크립트 내에서 큰 따옴표로 인수를 전달하는 방법

분류에서Dev

작은 따옴표와 큰 따옴표가 이미 사용중인 경우 find -exec에 대한 솔루션

분류에서Dev

작은 따옴표 / 큰 따옴표와 괄호를 확인하는 정규식?

분류에서Dev

입력 값에 작은 따옴표와 큰 따옴표를 포함하는 에코 문자열

분류에서Dev

다른 명령에 대해 작은 따옴표와 큰 따옴표를 포함하는 명령 래핑

분류에서Dev

문자열 양쪽 끝에서 작은 따옴표와 큰 따옴표를 제거하는 방법

분류에서Dev

전체 XML 파일에서 작은 따옴표 ( ')를 큰 따옴표로 바꾸는 JAVA 코드 조각

분류에서Dev

Bash에서 인용 된 변수로 중첩 된 작은 따옴표와 큰 따옴표가 많은 명령을 실행하는 방법

분류에서Dev

작은 따옴표와 큰 따옴표 앞에 백 슬래시 추가

분류에서Dev

빈 문자열 (큰 따옴표) 인수를 dockerfile에 전달

분류에서Dev

작은 따옴표를 큰 따옴표로 이스케이프하는 방법

분류에서Dev

쉘을 true로 설정하지 않고 하위 프로세스에 큰 따옴표를 전달하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    따옴표와 큰 따옴표가있는 인수를 bash 스크립트에 전달

  2. 2

    큰 따옴표가 포함 된 인수를 쉘 스크립트 함수에 전달하는 방법은 무엇입니까?

  3. 3

    자바 스크립트에 C # 문자열을 전달할 때 작은 따옴표와 큰 따옴표를 우아하게 이스케이프하는 방법

  4. 4

    쉘 스크립트에서 큰 따옴표로 변수 값을 전달하는 방법

  5. 5

    자바 스크립트에서 작은 따옴표와 큰 따옴표를 사용하는 방법

  6. 6

    쉘 스크립트의 줄에 큰 따옴표를 추가하는 방법은 무엇입니까?

  7. 7

    자바 스크립트 : 왜 작은 따옴표와 큰 따옴표가 여전히 함께 존재합니까?

  8. 8

    작은 따옴표와 큰 따옴표 안에 이미있는 텍스트를 어떻게 인용 할 수 있습니까?

  9. 9

    작은 따옴표와 큰 따옴표가 모두있는 표현식을 어떻게 에코합니까?

  10. 10

    큰 따옴표로 묶인 bash 스크립트 인수를 PHP CLI 스크립트에 전달

  11. 11

    이전 VB 스크립트는 큰 따옴표 안에 큰 따옴표를 이스케이프하는 방법

  12. 12

    이전 VB 스크립트는 큰 따옴표 안에 큰 따옴표를 이스케이프하는 방법

  13. 13

    R에서 큰 따옴표와 작은 따옴표 (항상)를 바꿀 수 있습니까?

  14. 14

    쉘 스크립트에서 큰 따옴표를 백 슬래시 큰 따옴표로 대체하십시오.

  15. 15

    자바 스크립트는 작은 따옴표를 큰 작은 따옴표 문제로 바꿉니다.

  16. 16

    JSON 배열에서 큰 따옴표와 작은 따옴표를 이스케이프하는 방법

  17. 17

    큰 따옴표와 작은 따옴표가있는 문자열을 EF에서 SQL로 저장

  18. 18

    bash 스크립트 내에서 큰 따옴표로 인수를 전달하는 방법

  19. 19

    작은 따옴표와 큰 따옴표가 이미 사용중인 경우 find -exec에 대한 솔루션

  20. 20

    작은 따옴표 / 큰 따옴표와 괄호를 확인하는 정규식?

  21. 21

    입력 값에 작은 따옴표와 큰 따옴표를 포함하는 에코 문자열

  22. 22

    다른 명령에 대해 작은 따옴표와 큰 따옴표를 포함하는 명령 래핑

  23. 23

    문자열 양쪽 끝에서 작은 따옴표와 큰 따옴표를 제거하는 방법

  24. 24

    전체 XML 파일에서 작은 따옴표 ( ')를 큰 따옴표로 바꾸는 JAVA 코드 조각

  25. 25

    Bash에서 인용 된 변수로 중첩 된 작은 따옴표와 큰 따옴표가 많은 명령을 실행하는 방법

  26. 26

    작은 따옴표와 큰 따옴표 앞에 백 슬래시 추가

  27. 27

    빈 문자열 (큰 따옴표) 인수를 dockerfile에 전달

  28. 28

    작은 따옴표를 큰 따옴표로 이스케이프하는 방법

  29. 29

    쉘을 true로 설정하지 않고 하위 프로세스에 큰 따옴표를 전달하는 방법은 무엇입니까?

뜨겁다태그

보관