Мне нужен сценарий 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
. Это объясняет результат, но я не смог найти правильный способ сделать это.