Включая $ @ для передачи всех аргументов командной строки, когда сценарий оболочки вызывает себя с bash - c - PullRequest
0 голосов
/ 07 августа 2020

Мне нужен сценарий bash для вызова самого себя (фактически в другом контексте, внутри контейнера Docker), и я использую для этого команду bash -c. Тем не менее, я борюсь с тем, как передать все переменные командной строки, даже после прочтения множества связанных вопросов здесь. Это пример сценария:

#!/bin/bash
# If not in the right context, invoke script in right context and exit
if [ -z ${NESTED+x} ]; then
  NESTED=true bash -c "./test.sh $@"
  exit
fi

echo "$1"
echo "$2"
echo "$3"

Если я сохраню это как test. sh и назову его с помощью ./test.sh 1 2 "3 4", я бы хотел, чтобы эти аргументы отображались эхом, но только первый из них вывод.

Если я использую set -x, он показывает, что bash вставляет некоторые неожиданные кавычки, поэтому вызов становится NESTED=true bash -c './test2.sh 1' 2 3 4. Это объясняет результат, но я не смог найти правильный способ сделать это.

1 Ответ

0 голосов
/ 07 августа 2020

bash -c не следует использовать, так как он не может легко обработать "3 4":

#!/bin/bash
# If not in the right context, invoke script in right context and exit
if [ -z ${NESTED+x} ]; then
  NESTED=true ./test.sh "$@"
  exit
fi

echo "$1"
echo "$2"
echo "$3"
...