bsub будет добавлять одинарные кавычки вокруг аргументов, если аргумент начинается с $
.Например.Если командной строкой bsub является
bsub command -a $ARG1 -b $ARG2
, то bsub добавит к аргументам кавычки для 2-го и 4-го параметров.Команда хранится так:
command -a '$ARG1' -b '$ARG2'
Один из способов предотвратить это - поместить команды в скрипт.Вот так:
$ cat cmd
echo $LSB_JOBINDEX
echo "line 2"
echo $LSB_JOBINDEX
Затем запустите свою работу так:
$ bsub -I < cmd
Job <2669> is submitted to default queue <normal>.
<<Waiting for dispatch ...>>
<<Starting on hostA>>
0
line 2
0
Обратите внимание, что -I
не нужен.Это просто, так что вы можете увидеть вывод задания на стандартный вывод bsub.
EDIT
OK.Похоже, это работает.Но это не очень серьезный ответ, так как это так некрасиво.Дело в том, что bsub окружит аргумент одинарными кавычками, если аргумент начинается с $
.Таким образом, стратегия состоит в том, чтобы найти способ убедиться, что первый символ в аргументе не является $
.Одним из способов является использование любого символа, кроме $
, в качестве первого символа аргумента.За ним следует буква возврата, затем $
.Обратите внимание, что это должен быть фактический символ возврата, а не ^
, за которым следует H
.Используйте ctrl-v
, а затем ctrl-h
для добавления литерала к командной строке.
$ bsub -I echo "x^H\$LSB_JOBINDEX" "x^H\$LSB_JOBINDEX"
Job <2686> is submitted to default queue <normal>.
<<Waiting for dispatch ...>>
<<Starting on hostA>>
0 0
EDIT2
Также работает литерал табуляции.Не то чтобы намного лучше.
$ bsub -I echo " \$LSB_JOBINDEX" " \$LSB_JOBINDEX"
Job <2687> is submitted to default queue <normal>.
<<Waiting for dispatch ...>>
<<Starting on hostA>>
0 0