Как запустить eval с помощью команды lockf?

Плохо. В предыдущем файле Kbuild был SPI _SUNXI _NDMA, и я заменил SUNXI на SUN7I, в то время как я должен писать SUN7I _SPI _NDMA, а не SPI _SUN7I _NDMA.

0
31.08.2021, 04:20
1 ответ
readonly scr="MYENV=1 sh /tmp/scr.sh"
eval ${scr} -a 1 -b 2

Здесь, наверное, лучше использовать функцию:

scr() {
    MYENV=1 sh /tmp/scr.sh "$@"
}
scr -a 1 -b 2

Это по-прежнему не помогает запустить его через lockf, если только вы не сделаете что-то вроде экспорта функции (в Bash ), а затем lockfзапустите оболочку, чтобы функция была доступна..

Вы можете избежать неудобного слова присваивания, используя envдля установки переменной. Это внешняя программа, поэтому она доступна и для lockf. С тем, как вы сохраняете команду ранее:

readonly scr="env MYENV=1 sh /tmp/scr.sh"
$scr -a 1 -b 2
# or 
lockf -k /tmp/f.lock $scr -a 1 -b 2

Но обратите внимание, что это не лучший способ сохранить команду, он не сработает в тот момент, когда вам нужно сохранить, например. имя файла с пробелами там. Лучше использовать массив (в Bash/ksh/zsh ):

.
scr=(env MYENV=1 sh /tmp/scr.sh)
"${scr[@]}" -a 1 -b 2
# or 
lockf -k /tmp/f.lock "${scr[@]}" -a 1 -b 2

См.:Как запустить команду, хранящуюся в переменной?

1
31.08.2021, 07:44

Теги

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