Попытайтесь освободить больше места для текста с помощью "text_buffer_size".
Конечно:
trap 'unset x; trap - USR1' USR1; { sleep 5m; kill -USR1 $$; } &
Это устанавливает ловушку для сигнала USR1, затем (обман с точкой с запятой, чтобы поместить его в одну строку )группирует команды сна и уничтожения в фоновом задании. Когда это задание завершится, оно отправит сигнал USR1 текущей оболочке, которая выполнит ловушку. Ловушка сбрасывается x
, а затем очищается.
Нет функций!
Вы не можете использовать задания at
, поскольку они выполняются в другом контексте и не могут повлиять на текущую оболочку.
Но мы можем сделать что-то подобное. Этот код вызовет сигнал тревоги, который мы можем поймать и выполнить действие на
.#!/bin/bash
x=100
trap 'unset x' SIGALRM
mypid=$$
( /bin/sleep 3 ; kill -ALRM $mypid) &
for a in 1 2 3 4 5 6
do
echo Now x=$x
sleep 1
done
Этот пример длится всего 3 секунды, чтобы продемонстрировать решение; Вы можете выбрать задержку по мере необходимости.
В действии:
Now x=100
Now x=100
Now x=100
Now x=
Now x=
Now x=
Вы можете легко сделать это одной строкой с помощью ;
...
На самом деле самым простым способом может быть использование составной команды с объявлением переменной в начале.
Если вы объявляете переменную в начале командной строки, переменная временно определяется только для области действия этой команды.
madumlao@lezard:~$ x=foo
madumlao@lezard:~$ x=y bash -c 'echo $x'
y
madumlao@lezard:~$ echo $x
foo
Как видите, строка с объявлением переменной устанавливает переменную в среде только для этой строки.
Обратите внимание, что следующее не будет работать:
madumlao@lezard:~$ x=foo
madumlao@lezard:~$ x=y echo $x
madumlao@lezard:~$ echo $x
foo
Параметр $x во второй строке анализируется во время анализа строки команды -до фактического присвоения значения, поэтому он неожиданно оказывается пустым!
С вашим пересмотренным вопросом, основанным на командной строке, а не на скрипте, самым простым решением будет использование подоболочки для выполнения вашей работы.
например
$ bash
$ x=100
$ echo $x
100
$ exit
$ echo $x
$
Все переменные, которые вы установили между запуском bash
и exit
этой оболочки, будут забыты.
Это очень похоже на то, как работает часть wget... | bash
, за исключением того, что вы можете вырезать и вставлять/печатать команды.