명령 인수 로드/재정의를 지원하는 "도우미" 스크립트가 있습니까?

명령 인수 로드/재정의를 지원하는 "도우미" 스크립트가 있습니까?

다음 스크립트 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 파일의 모든 값이 사용됩니다.와는 별개로 $topicfoobar대신에 와 같을 것입니다 #. 이렇게 하려면 명령줄 인수를 -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

다음과 같은 경우 매우 간단한 방법이 있습니다.

  1. bash, ksh 또는 유사한 고급 셸을 사용합니다.
  2. 원하는 구문을 약간 변경합니다.

그리고;

#!/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, 하지만 그렇다고 해서 일이 더 쉬워지는 것 같지는 않습니다.

관련 정보