В ksh93
вы можете использовать:
var=${
my command that updates global variable
}
Это форма подстановки команд, которая не порождает подоболочку. Для команд, которые являются встроенными командами,вместо того, чтобы заставлять их записывать свой вывод в канал (, для которого вам понадобятся разные процессы для чтения и записи в канал, чтобы избежать мертвых -блокировок ), ksh93
просто заставляет их ничего не выводить, а собирать то, что они вывели бы, чтобы составить расширение.
$ ksh -c 'a=${ b=123; echo foo;}; echo "$a $b"'
foo 123
Подстановка командыfish
также ведет себя так:
$ fish -c 'set a (set b 123; echo foo); echo $a $b'
foo 123
В большинстве других оболочек вы бы использовали временный файл:
my command that updates global variable > file
var=$(cat file) # can be optimised to $(<file) with some shells
В Linux и с bash
или zsh
(, которые используют временные файлы для <<<
), вы можете сделать:
{ my command that updates global variable > /dev/fd/3 &&
var=$(cat<&3); } 3<<< ''
Исправлено! Я погуглил и нашел эту ветку на Reddit с похожими проблемами. Я добавил 'noresume' в параметры ядра. В частности, я добавил GRUB_CMDLINE_LINUX_DEFAULT="noresume"
к /etc/default/grub
и запустил sudo update-grub
.
Это работает!