반응형

출처

https://stackoverflow.com/questions/40852784/how-can-i-use-a-variable-in-curl-call-within-bash-script

bash 스크립트에서 curl 호출시 변수를 어떻게 사용할 수 있을까요?

간단한 작업이 있고 제 bash 스크립트 안에 curl 호출시 변수를 어떻게 사용할 수 있을지 알아내기 위해 이미 여러 시간을 소비하였습니다.

message="Hello there"
curl -X POST -H 'Content-type: application/json' --data '{"text": "${message}"}'

이는 문법적으로 작은 따옴표 안에 있기 때문에 ${message}을 출력합니다. 만약 따옴표를 바깥쪽은 큰 따옴표 안쪽은 작은 따옴표로 변경하였을 때 Hello와 there 명령어가 없다고(command not found: Hello 다음에 command not found: there) 나옵니다.

어떻게 해야 합니까?


2개 답변 중 1개만 추림

변수는 작음 따옴표 안에서 확장될 수 없습니다. 큰 따옴표로 다음처럼 다시 작성할 수 있습니다.

curl -X POST -H 'Content-type: application/json' --data "{\"text\": \"${message}\"}"

큰 따옴표 안에 큰 따옴표는 escape 문자(\)가 있어야 합니다.

다른 방법은 다음처럼 할 수 있습니다.

curl -X POST -H 'Content-type: application/json' --data '{"text": "'"${message}"'"}'

이것은 작은 따옴표에서 밖에서 단어 분할을 방지하기 위해 ${message} 를 큰 따옴표로 묶은 다음 다른 작은 따옴표 문자열로 끝납니다. 다음처럼 처리 됩니다.

... '{"text": "'"${message}"'"}'
    ^^^^^^^^^^^^
    작은 따옴표 문자열


... '{"text": "'"${message}"'"}'
                ^^^^^^^^^^^^
                큰 따옴표 문자열


... '{"text": "'"${message}"'"}'
                            ^^^^
                            작은 따옴표 문자열
반응형
반응형

출처
https://stackoverflow.com/questions/4824590/propagate-all-arguments-in-a-bash-shell-script

bash 쉘 스크립트에서 모든 인수를 전달

저는 다른 스크립트를 호출하는 애무 간단한 스크립트를 작성하였고 현재 스크립트로부터 실행할 스크립트로 파라미터를 전달할 필요가 있습니다.
예를 들어 제 스크립트는 foo.sh이고 bar.sh를 호출합니다.
foo.sh:

bar $1 $2 $3 $4

각 파라미터를 명시적으로 지정하지 않고 이를 어떻게 할 수 있을까요?


8개의 답변 중 1개의 답변만 추려냄

같은 것을 파라미터로 사용하길 원하신다면 순수한 $@대신에 "$@"를 사용하세요.
확인:

$ cat foo.sh
#!/bin/bash
baz.sh $@

$ cat bar.sh
#!/bin/bash
baz.sh "$@"

$ cat baz.sh
#!/bin/bash
echo Received: $1
echo Received: $2
echo Received: $3
echo Received: $4

$ ./foo.sh first second
Received: first
Received: second
Received:
Received:

$ ./foo.sh "one quoted arg"
Received: one
Received: quoted
Received: arg
Received:

$ ./bar.sh first second
Received: first
Received: second
Received:
Received:

$ ./bar.sh "one quoted arg"
Received: one quoted arg
Received:
Received:
Received:
반응형
반응형

출처 : http://stackoverflow.com/questions/305035/how-to-use-ssh-to-run-shell-script-on-a-remote-machine

ssh를 사용하여 원격 컴퓨터의 shell script를 실행하는 방법?

저는 원격 컴퓨터에서 로컬 shell script(윈도우즈/리눅스)를 실행해야 합니다.

A 컴퓨터와 B컴퓨터 모두에서 설정된 ssh가 있습니다. 저의 스크립트는 B컴퓨터에서 수행할 내용이 A컴퓨터에 있습니다.

로컬과 원격 컴퓨터는 윈도우즈나 유닉스 기반의 시스템일 수 있습니다.

plink/ssh를 사용하여 이를 실행할 수 있는 방법이 있을까요?


20개의 답변 중 1개의 답변

만약 A 컴퓨터가 Windows box라면 -m 파라미터와 함께 Plink(PuTTY의 일부)를 사용하실 수 있고 원격 서버에 로컬(내 컴퓨터의) 스크립트를 실행할 것입니다.

plink root@MachineB -m local_script.sh

만약 A컴퓨터가 유닉스를 기반으로한 시스템이면 다음처럼 사용할 수 있습니다.

ssh root@MachineB 'bash -s' < local_script.sh

이를 수행하기 위해 스크립트를 원격 컴퓨터로 복사하실 필요가 없습니다.


(번역과 관련없는) 추가내용

ssh 뿐만이 아니라 rsh도 똑같은 방법으로 실행이 가능합니다.

ssh root@MachineB 'bash -s' < local_script.sh

ssh 계정명@원격호스트(IP) 수행할명령어 < 로컬_스크립트.sh

만약 원격 컴퓨터의 프로그램이 수행이 되지 않는다면

로컬_스크립트.sh에서 export LD_LIBRARY_PATH를 원격컴퓨터에 맞게 설정하셔야 됩니다.

예) export LD_LIBRARY_PATH=/usr/lib:/usr/local/lib

반응형

'리눅스 shell' 카테고리의 다른 글

expect  (0) 2015.08.09
리눅스 쉘에서 '>/dev/null 2>&1'의 뜻이 무엇인가요?  (2) 2015.07.10
rsync  (0) 2015.02.17
왜 쉘 명령어가 \(백슬래시)로 시작하나요?  (0) 2014.07.08
fg  (0) 2011.08.03

+ Recent posts