다음 스크립트 sub.sh가 있습니다.
#!/bin/sh
. ./sub.conf
echo $topic
mosquitto_sub -u $user -P $password -h $server -t $topic
관련 설정 파일 sub.conf:
topic="#" #-t
user="mqtt" #-u
password="mqttpass" #-P
server="127.0.0.1" #-h
내 스크립트를 호출하고 sub.conf 파일에 사용되는 전달된 값을 재정의하는 방법을 찾고 싶습니다. 예:
./sub.sh -t foobar
.conf 파일의 모든 값이 사용됩니다.와는 별개로 $topic
foobar
대신에 와 같을 것입니다 #
. 이렇게 하려면 명령줄 인수를 -t
에 매핑해야 합니다 $topic
. 이것을 작성하면 내가 작성하려는 것보다 더 많은 코드가 빨리 바뀔 수 있다는 것을 깨달았습니다. 나는 누군가가 바퀴를 재발명하는 대신 비슷한 것을 썼다고 생각했습니다.
답변1
저는 다음과 같은 정말 좋은 스크립트 생성기 웹사이트를 찾았습니다.알바스. "템플릿"을 입력하면 뼈대 스크립트가 작성됩니다. 내 예에서는 ~/sub.conf
기본값을 사용하여 사용자 홈 디렉터리에 파일을 만듭니다.
topic="#"
user="mqtt"
password="mqttpass"
server="127.0.0.1"
다음으로 argbash로 이동하십시오.템플릿 생성 페이지다음 템플릿을 제공하세요.
#!/bin/bash
# version="0.1"
#
# This is an optional arguments-only example of Argbash potential
#
# ARG_OPTIONAL_SINGLE([user], [u], [optional argument help msg])
# ARG_OPTIONAL_SINGLE([Password], [P], [optional argument help msg])
# ARG_OPTIONAL_SINGLE([server], [s], [optional argument help msg])
# ARG_OPTIONAL_SINGLE([topic], [t], [optional argument help msg])
# ARG_HELP([The general script's help msg])
# ARGBASH_GO
# [ <-- needed because of Argbash
echo "Value of --user: $_arg_user"
echo "Value of --Password: $_arg_password"
echo "Value of --server: $_arg_server"
echo "Value of --topic: $_arg_topic"
# ] <-- needed because of Argbash
그런 다음 "지금 스크립트 생성" 버튼을 클릭하세요. 그러면 다운로드할 수 있는 스크립트가 생성됩니다. 이 스크립트 내에서 다음을 검색하세요.
# THE DEFAULTS INITIALIZATION - OPTIONALS
_arg_user=
_arg_password=
_arg_server=
_arg_topic=
다음과 같이 변경하세요.
# THE DEFAULTS INITIALIZATION - OPTIONALS
. ~/.sub.conf
_arg_user=$user
_arg_password=$password
_arg_server=$server
_arg_topic=$topic
. ~/.sub.conf
구성 파일의 값은 파일에 지정된 변수에 로드됩니다. 다음 줄은 템플릿에 지정하는 각 명령줄 인수를 채웁니다. 스크립트에 전달된 모든 값은 이러한 기본값을 재정의합니다. echo "Value of --user: $_arg_user
원하는 경우 이러한 명세서를 삭제할 수 있습니다. 스크립트 마지막에 다음과 같은 매개변수를 사용하세요.
mosquitto_sub -u $_arg_user -P $_arg_password -h $_arg_server -t $_arg_topic
답변2
다음과 같은 경우 매우 간단한 방법이 있습니다.
- bash, ksh 또는 유사한 고급 셸을 사용합니다.
- 원하는 구문을 약간 변경합니다.
그리고;
#!/bin/bash
. ./sub.conf
[ -n "$1" ] && declare "$@" # use arguments to set variables
echo $topic
mosquitto_sub -u $user -P $password -h $server -t $topic
넌 할 수있어;
./sub.sh topic='#'
예:
$ bash -c 'foo=1; declare "$@"; echo $baz $foo' _ foo=bar baz=fo
fo bar
답변3
문자열만으로 호출할 수 있는 기본 솔루션은 없습니다. 그러나 getopts
유사하거나 유사한 것을 사용할 수 있습니다 .
-t
-u
다음은 get 및 options의 예 입니다 bash
.
#!/bin/bash
while getopts ":t:u:" OPTION; do
case "$OPTION" in
t) echo topic="$OPTARG" ;;
u) echo user="$OPTARG" ;;
esac
done
이는 스크립트에 추가해야 하는 최소값입니다.
이와 같은 도서관을 고려해 볼 수도 있습니다.shflags, 하지만 그렇다고 해서 일이 더 쉬워지는 것 같지는 않습니다.