라는 파일이 있습니다테스트 스크립트라는 프로그램을 실행해야 합니다.명령 실행다음과 같이:
./run_command <input path>
스크립트에 다음 매개변수를 제공하는 경우:
./test_script argument1=sometext argument2=othertext inputpath=/folder1/folder2/file.txt argument4=moretext
스크립트에서 매개변수를 찾는 방법입력 경로=/folder1/folder2/file.txt그리고 통과/폴더1/폴더2/file.txt도착하다명령 실행? inputpath=/folder1/folder2/file.txt가 항상 세 번째 위치에 있는 것은 아니며 제공되는 인수 수가 다를 수 있다는 점에 유의하세요.
답변1
그리고 zsh
:
#! /bin/zsh -
inputpath=(${${(M)argv:#inputpath=*}#*=})
(($#inputpath > 0)) && ./run-command $inputpath
모두 추출합니다길s를 inputpath=path
스크립트에 대한 인수로 사용하고 비어 있지 않은 인수를 $inputpath
배열에 저장합니다. 그런 다음 ./run-command
이러한 입력 경로가 발견되면 매개변수로 실행합니다.
POSIXly에서는 다음과 같이 할 수 있습니다.
#! /bin/sh -
run_with_extracted_keyword() (
cmd="${1?}" keyword="${2?}"
shift 2
for arg do
case $arg in
("$keyword="*) set -- "$@" "${arg#*=}"
esac
shift
done
[ "$#" -gt 0 ] && exec "$cmd" "$@"
)
run_with_extracted_keyword ./run-command inputpath "$@"
GNUly에서는 다음과 같이 할 수 있습니다:
#! /bin/bash -
set -o pipefail
printf '%s\0' "$@" |
LC_ALL=C grep -zPo '^inputpath=\K(?s:.*)' |
xargs -r0 ./run-command
답변2
Stéphane이 댓글에서 언급한 것처럼 입력을 제어하고 스크립트 액세스를 제한하여 셸 주입을 방지할 수 있다면 어떻게 될까요?
#!/bin/bash
for arg; do
declare "$arg"
done
echo "$argument1"
sometext
일반적으로 위치 매개변수에 액세스하려면 echo $1
, $2
, $3
... 을 수행합니다.
하지만 이 형식을 사용하면 var=value
이 코드가 더 잘 맞을 것입니다.