Если Вы ищете строго офлайновую защиту, то что-то как автосмонтированный зашифрованный раздел должно добиться цели. Я вижу, что Вы используете apt-get
, таким образом, существует справедливый шанс, Вы находитесь на Ubuntu. В этом случае это могло бы заинтересовать Вас, чтобы знать, что Ubuntu имеет шифрование как опцию во время установки. При использовании Debian вот статья, я нашел, что покрытия, Как настроить зашифрованную файловую систему на нескольких легких шагах.
Это были 10 часов, с тех пор как я задал вопрос, и я разработал решение... Примечание: Поскольку я ранее упомянул в комментарии (под вопросом), wait
не работает с этими процессами. Я предполагаю, что это вызвано тем, что эти 'замены процесса' не являются 'дочерними' процессами, которым я верю, что wait
ожидает. (Я попробовал wait
без args)....
Комментарии к его функциям и сбоям ценились бы. Я не вполне понимаю, как stdin взят zenity
и tr
когда echo
первая команда, но я просто думал, что дам ей движение... Это, кажется, работает (в этом случае), но действительно ли этот метод надежен?
Довольно вероятно, будут некоторые хорошо проверенные на практике методы там для занятия этим, таким образом, другие ответы были бы worthwile....
#!/bin/bash
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
# Set up flag-files for processes to send PIDs to main process
# The first thing each process does is: echo -n "$BASHPID " > flag-file
for i in {1..2};do cp /dev/null "$listf".pid$i;done
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
eval locate $zenargs |tee \
>(echo -n "$BASHPID " > "$listf".pid1 ; \
zenity --progress --pulsate --auto-close) \
>(echo -n "$BASHPID " > "$listf".pid2 ; \
tr $'\x60' $X01 \
|sed -n "s/^\(.*\/\)\(.*\)/\1\2\n\2\n\1/p" \
|while IFS= read -r line ; do \
#
#
# process the data
#
#
done > "$listf" ) \
>/dev/null
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
#### WAIT for processes to terminate
pids=$(cat "$listf".pid{1,2})
while [[ "$pids" == *[0-9]* ]] ; do
sleep .1 # GNU
for pid in $pids ; do
if ! kill -0 "$pid" 2>/dev/null; then
pids="${pids/$pid/}"
fi
done
done
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
cat "$listf"
#
Начиная с версии coreutils 8.24, есть другой способ:
tee -p dev / zero> ( голова -c10M | wc -c)>> (голова -c1 | wc -c) | numfmt --to = iec
Результатом будет
1
10M
Ключевые моменты здесь:
Используйте -p
, что вызовет tee
предупреждать об ошибках при записи в любой выход, а не в канал. Это означает, что ошибка EPIPE на fwrite
не приведет к завершению работы tee
, а tee
будет работать, пока есть хотя бы один выходной файл, открытый для записи. Если вы хотите получить предупреждение о выводе EPIPE в stderr, используйте - output-error = warn
вместо -p
.
Используйте >> (head -c1 | wc -c)
, чтобы перенаправить стандартный вывод tee на другой > (подстановка процесса)
. Это важно по двум причинам. Вам нужно позаботиться о выводе stdout, производимом tee
. Если вы используете > / dev / null
, например, tee
будет работать, пока stdin имеет данные (в данном случае навсегда). В то же время это позволит отправить вывод > (подстановка процесса)
на стандартный вывод для дальнейшей обработки. Другие возможности, но не столь элегантные, - это закрыть вывод stdout tee
другими способами. Две возможности: > / dev / full
и > & -
. Однако они будут выдавать предупреждения (tee: стандартный вывод: на устройстве не осталось места и tee: стандартный вывод: неверный дескриптор файла соответственно)
{ print ${Hdr} ; cat ${file} ; } > outFile
создайте использование{ ; }
пары? (точка с запятой как последний маркер перед закрывающей фигурной скобкой очень важна во встроенных конструкциях). Они могут быть довольно сложными, с условной логикой в решении в конечном счете отправляется в> outFile
. Я надеюсь, что это помогает. (Извините, но у меня нет времени, чтобы попытаться выяснить точно, что делает Ваш сценарий, я ничего не знаю о zenity). Также отметьте то, что ОС Вы используете? – shellter 05.04.2011, 22:35;
. В контексте моего вопроса, Вашего{ }
пример, дал реальное понимание как( )
процесс фона/замены и{ }
встройте работу процессов в отношении std-I/O. Кажется, что они должны открыть канал FIFO, который доступен любой команде где угодно в блоке процесса. Если я имею верное представление, это действительно довольно просто.tee
должен открытие FIFO для каждого процесса. Эти процессы могут быть быстрыми или медленными, и в моем случае,tr
процесс был медленнее, чем встроенноеstdout
канал, таким образом,cat
только получил часть файла. ре – Peter.O 06.04.2011, 09:55bash
способ обработать сценарий 'ожидания', затем я полагаю этому кроме некоторого другого способа проверить на рабочий процесс (а неkill -0
), затем единственные вещи, в которых это нуждается.. 1) тестирование кодов выхода каждого подпроцесса.. 2) проверка, что файлы флага на самом деле существуют перед продолжением. – Peter.O 06.04.2011, 09:59