Передайте пустую командную строку через скрипт - PullRequest
2 голосов
/ 19 июня 2019

Мой bash-скрипт ожидает аргументы командной строки, которые я анализирую без проблем. Однако позже скрипт вызывает другой скрипт, который также принимает позиционные параметры, но предоставление параметров не является обязательным.

Когда мой сценарий source s другой сценарий без аргументов, другой сценарий все еще пытается проанализировать те аргументы, которые были переданы моему сценарию в первую очередь.

У меня есть два решения, но ни одно из них мне не подходит.

  1. С shift:

    # now making this script to handle branches:
    OPTIND=1
    while getopts "b:" opt; do
        case "$opt" in
            'b' ) branch=$OPTARG ;;
        esac
        shift
    done
    
  2. Передача пустого аргумента во второй скрипт:

    source ${MINICONDA}/bin/activate ""
    

1 Ответ

3 голосов
/ 19 июня 2019

Обратите внимание, что это не требуется для обычных вызовов скрипта как внешнего процесса, но только для вызовов с source или ..

Для предоставления контекста читателям из встроенных команд bash.в справке к source:

Если предоставляются какие-либо аргументы, они становятся позиционными параметрами при выполнении имени файла.В противном случае позиционные параметры не изменяются.


Самый простой способ управления списком аргументов - использовать set -- arg1 arg2 ..., чтобы немедленно перезаписать его новым списком.Таким образом:

orig_args=( "$@" )        # back up the original arguments
set --                    # clear the argument list

source whatever

set -- "${orig_args[@]}"  # if you ever need them back
...