Опции ядра Alsa -lib

Поскольку вы запускаете test2.shкак отдельный сценарий оболочки, переменная оболочки iв нем недоступна. Это означает, что расширение $iбудет пустым в скрипте test2.sh. Вы можете решить это двумя способами:

  1. Сделайте iпеременной окружения через export iв первом скрипте. Это удобно, но не очень хорошее решение в общем случае, так как другой скрипт вполне может захотеть использовать свою собственную переменную i, которая может быть независимой от любого значения переменной в вызывающем скрипте.

  2. Укажите $iв командной строке скрипта test2.shпри его вызове:test2.sh "$i". Это позволит получить доступ к значению $iв test2.shв качестве"$1"(первого аргумента командной строки ).

Вторая проблема заключается в том, что ваша mg5_aMCпрограмма ожидает ввода, т. е. команд, которые вы перечисляете в сценарии. Но то, как вы ввели их в test2.sh, означает, что они будут восприниматься как команды оболочки . В скрипте нет ничего, что бы передавало специальные управляющие команды программе.

Как видно из полученной ошибки, это оболочка жалуется, что команды не найдены. Это не команды оболочки, так что это (, когда вы знаете, как все будет интерпретироваться ), неудивительно.


Предполагая, что ваша mg5_aMCпрограмма читает со стандартного ввода, я бы не писал сценарий оболочки для каждого запуска программы, а вместо этого предоставлял бы для него управляющий/командный файл ввода:

#!/bin/bash

file="ATLASbins.txt"

i=1
while IFS= read -r scan 
do
    sed -e "s/@scan@/$scan/" \
        -e "s/@i@/$i/" \
        input-template.in >input.in

    /home/mario/mg5/bin/mg5_aMC <input.in

    i=$((i + 1))
done <"$file"

Здесь файл input-template.inможет выглядеть примерно так

"import model Implementation"
"generate u++ > l+ l+"
output firstscript@i@
set vchi @scan@
launch firstscript@i@

Я решил использовать @thing@для вещей, которые я заменю вызовом sedв сценарии оболочки.

Это предполагает, что значение $scanне содержит символов, которые могли бы помешать команде sed(, такой как/).


В качестве альтернативы, если сценарий управления для вашей программы достаточно короткий,заключается в использовании "здесь -документ" для передачи управляющих команд в вашу программу:

#!/bin/bash

file="ATLASbins.txt"

i=1
while IFS= read -r scan 
do
    /home/mario/mg5/bin/mg5_aMC <<END_INPUT
"import model Implementation"
"generate u++ > l+ l+"
output firstscript$i
set vchi $scan
launch firstscript$i
END_INPUT

    i=$((i + 1))
done <"$file"

Документ здесь -— это в основном тип перенаправления фрагмента текста, который дается не в файле, а между <<TAGи окончанием TAG. Переменные в тексте будут (, если они написаны, как указано выше, )будут расширены оболочкой перед вводом в вашу команду.

0
07.04.2021, 15:19
1 ответ

С одной стороны (VMware )вы выбираете соответствующее аппаратное обеспечение для эмуляции, это руководство должно дать вам представление:https://docs.vmware.com/en/VMware-Workstation-Pro/16.0/com.vmware.ws.using.doc/GUID-34368AB3-5742-40CA-8BBA-134833FE200A.html

На стороне Linux вы выбираете драйвер для вашей любимой (эмулируемой )звуковой карты.

0
28.04.2021, 22:53

Теги

Похожие вопросы