Я использую tcsh (требуется контракт, не могу перейти на bash и т. Д.), Но у меня проблема с созданием команды на основе различных условий для разных частей.
Некоторые имена изменены для защиты невинных ...
Если имя новой или старой программы действительно выбрано ранее препроцессором и жестко закодировано к моменту запуска этого сценария оболочки:
set myCMDline = newProgName
set myCMDlineTmpFile = "/tmp/myCMDlineTmpScriptFile.csh"
set bsubQname = "typical"
set bsubResources = "span[hosts=1]"
set myCMDline = "bsub -q $bsubQname -n 8 -R \"$bsubResources\" $myCMDline"
($myCMDline)
Теперь я попробовал нескольковарианты выше, все не работает по той или иной причине.Самое близкое, что я думаю, - это жалоба на несовпадающие двойные кавычки, даже когда они возвращаются назад.
Когда я выполняю эхо-запрос $ myCMDline, тогда это выглядит нормально, но выполнение же должно как-то отличаться...
set bsubResources = '"span[hosts=1]"' #double-quotes inside, single-quotes outside
set myCMDline = "bsub -q $bsubQname -n 8 -R $bsubResources $myCMDline"
.
set bsubResources = "span[hosts=1]" #double-quotes inside, single-quotes outside
set myCMDline = 'bsub -q $bsubQname -n 8 -R "$bsubResources" $myCMDline'
.
set bsubResources = "span[hosts=1]" #double-quotes inside, single-quotes outside
set myCMDline = "bsub -q $bsubQname -n 8 -R '$bsubResources' $myCMDline"
и т. Д.
Я также попытался создать дамп в отдельный файл временного сценария.к исходному тексту, но содержит имена переменных $, а не разрешенные эквиваленты, как я бы предпочел, поскольку я делаю set, а не setenv, и предпочитаю не помещать их в переменные оболочки.
Сначала я не смог повторитьСтрока "#! / bin / csh -f", кажется, пытается выполнить это, а не эхо, перенаправленное в файл временного сценария, и умирает.
rm -f $myCMDlineTmpFile
echo "#!/bin/csh -f > $myCMDlineTmpFile
echo "$myCMDline" >> $myCMDlineTmpFile
($myCMDlineTmpFile)
Затем я попробовал многострочное эхо, котороеВот где я вижу, что локальные имена переменных входят в файл, а не в их содержимое:
/bin/cat > $myCMDlineTmpFile <<EOF
#!/bin/csh -f
$myCMDline
EOF
source $myCMDlineTmpFile
И затем я пытаюсь вместо этого использовать eval:
eval `echo "$myCMDline &" `
с и безгалочки и т. д., но жалуется на неизвестные переменные для очереди name, ресурсы и т. д.
Добавление этого эха всегда выглядит так, как я хочу видеть в командной строке, между >>> и <<< </p>
echo "DEBUG - myCMDline= >>>$myCMDline<<<"
Пожалуйста, помогите мне решить эту загадку...