Как запустить первый пакетный файл и перейти ко второму пакетному файлу, не дожидаясь окончания первого пакетного файла

В исходном вопросе OP есть однострочное решение, базовое имя скрипта с расширением файла:

progname=$(tmp=${0%.*} ; echo ${tmp##*/})

Вот еще один, но, используя чит для basename:

progname=$(basename ${0%.*})

. Другие ответы ушли от исходного вопроса OP и сосредоточились на том, можно ли просто расширить результат выражений с помощью ${!var}, но столкнулись с ограничением, которое var должно явно соответствовать имени переменной. Сказав это, нет ничего, что помешало бы вам получить ответ с 1 линером, если бы вы связали выражения вместе с точкой с запятой.

ANIMAL=CAT
BABYCAT=KITTEN
tmp=BABY${ANIMAL} ; ANSWER=${!tmp} # ANSWER=KITTEN

Если вы хотите, чтобы это выглядело как один оператор, вы можете вложить его в подоболочке, т. е.

ANSWER=$( tmp=BABY${ANIMAL) ; echo ${!tmp} ) # ANSWER=KITTEN

Интересное использование - косвенное действие на аргументы функции bash. Затем вы можете встраивать вызовы функций bash для достижения многоуровневой вложенной косвенности, потому что нам разрешено делать вложенные команды:

Вот демонстрация косвенности выражения:

deref() { echo ${!1} ; }
ANIMAL=CAT
BABYCAT=KITTEN
deref BABY${ANIMAL} # Outputs: KITTEN

демонстрация многоуровневой косвенности через вложенные команды:

deref() { echo ${!1} ; }
export AA=BB
export BB=CC
export CC=Hiya
deref AA # Outputs: BB
deref $(deref AA) # Outputs: CC
deref $(deref $(deref AA)) # Outputs: Hiya
1
задан MrRoth 16 January 2019 в 16:15
поделиться

1 ответ

Если у вас есть файл с именем batchfile1 в пути path, и вы ожидаете, что он будет выполнен ... тогда этого не произойдет, поскольку ресурс batch не такой, как работает.

Я могу предположить, что первый ресурс batch не был выполнен, что привело к сбою запуска chef-client и, таким образом, второй ресурс batch не был выполнен.

Пакетный ресурс создает и выполняет временный файл (аналогично тому, как ведет себя ресурс скрипта), а не запускает встроенную команду. например:

batch 'echo some env vars' do
  code <<-EOH
    echo %TEMP%
    echo %SYSTEMDRIVE%
    echo %PATH%
    echo %WINDIR%
    EOH
end
0
ответ дан MrRoth 16 January 2019 в 16:15
поделиться