Передача переменных сценария bash другому сценарию bash для отправки задания в очередь

#linux #bash #c 11

Вопрос:

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

баш job.sh

Я увидел, что мой файл параметров, устройство и размер из submitjob.sh сценарий не перешел к job.sh сценарий.

Не могли бы вы, пожалуйста, помочь мне, в чем моя ошибка?!

Мой submitjob.sh:

 #!/bin/sh -f
echo "Input The File!";
read file
echo "Choose Gpu Or Cpu!";
read device
echo "Input Vector Size!";
read size
echo
if [ "$device" = "Gpu" ]; then
qsub -I -l nodes=1:gen9:ppn=2 -d . ./job.sh file device size
else
qsub -I -l nodes=1:skl:ppn=2 -d . ./job.sh file device size
fi
 

мой job.sh:

 #!/bin/bash

source /opt/intel/inteloneapi/setvars.sh

echo
echo start: $(date " %y%m%d.%H%M%S.%3N")
echo
$file $device $size
echo
echo stop: $(date " %y%m%d.%H%M%S.%3N")
echo
 

Комментарии:

1. Откуда можно bash job.sh было взять аргументы?

2. на самом деле я хотел передать аргумент из сценария submitJob в job.sh

3. Аргументы сценария находятся в "$@"

Ответ №1:

Вам нужно поставить $ перед переменными в submitjob.sh :

 qsub -I -l nodes=1:gen9:ppn=2 -d . ./job.sh "$file" "$device" "$size"
 

Затем job.sh вы получаете аргументы от $1 $2 , и т. Д.

 #!/bin/bash

source /opt/intel/inteloneapi/setvars.sh
file=$1
device=$2
size=$3

echo
echo start: $(date " %y%m%d.%H%M%S.%3N")
echo
"$file" "$device" "$size"
echo
echo stop: $(date " %y%m%d.%H%M%S.%3N")
echo
 

Комментарии:

1. Спасибо тебе, после баша submitJob.sh, когда я делаю удар job.sh это приводит к ошибке, которая заключается в том, что команда не найдена.

2. Проблема в том, что аргументы из submitJob не передаются на задание .sh

3. Строка $file $device $size пытается выполнить значение $file как команду. Это то, что должно быть?