Веб-приложение Word является бесплатным, и можно использовать его от браузера на Linux. Это произведет к docx и odt. Существует значительный код Codeplex, SourceForge, и др. который может помочь с преобразованием существующего чему-то в OpenXML. Если получатели используют Office 2007 SP2 или более новые, или у них есть Windows 7 или Windows 8 WordPad, они могут открыть Ваш ODT.
Итак, я сделал это в тестировании и, да, он потребляет много памяти. Я уже указывающе использовал меньшее число. Я могу представить, что Bash
Bash
Участвует эти ресурсы в течение нескольких дней, может быть немного раздражать.
ps -Fp "$$"; : {1..10000000}; ps -Fp "$$"
UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
mikeserv 32601 4241 0 3957 3756 4 08:28 pts/1 00:00:00 bash -l
UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
mikeserv 32601 4241 59 472722 1878712 4 08:28 pts/1 00:00:28 bash -l
Как вы можете видеть, существует значительное влияние на потребляемые ресурсы процесса. Ну, я постараюсь очистить это, но - насколько я могу сказать, - это потребует замены процесса оболочки с другим.
Во-первых, я установлю маркерную переменную, чтобы показать, что она поставляется со мной. Примечание: это не Экспорт
Ed.
var='just
testing
'\''
this stuff
'\'''
Далее я должен работать $ 0
. Это то же самое, что давно работающие демоны иногда должны преодолевать их состояние. Здесь имеет смысл.
Я буду использовать текущую оболочку для создания файла входного файла Heredoc для вновь EXEC
ED, который будет содержать все объявленные переменные оболочки. Отказ Вероятно, это может быть сделано по-другому, но я не знаю все подходящие коммутаторы командной линии для Bash
.
Новая оболочка вызывается с помощью коммутатора -L
-L -L ogin, который увидит к нему, что ваши файлы / RC
будут получены на обычном - и какие другие варианты оболочки в настоящее время Установите и хранятся в специальном параметре Shell $ -
. Если вы чувствуете -L
-L
Ogin - это не правильный способ перехода, а затем использовать коммутатор -I
, должен, по крайней мере, получить файл RC
.
exec "${0#-}" "-l$-" 3<<ENV
$(set)
ENV
Хорошо. Это только заняло секунду. Как это работает?
. /dev/fd/3 2>/dev/null
echo "$var"; ps -Fp "$$"
just
testing
'
this stuff
'
UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
mikeserv 32601 4241 12 4054 3800 5 08:28 pts/1 00:00:29 bash -lhimBH
просто нормально, как это казалось. <& 3
зависает на входе нового процесса оболочки, пока он не будет прочитан - поэтому я делаю это с .
и источник. Он, вероятно, будет содержать несколько переменных только для чтения по умолчанию, которые уже были установлены в новой оболочке по его RC
файлы и и т. Д., Итак, будут несколько ошибок - но я бросает, что на 2> / dev / null
. После этого, как вы можете видеть, у меня есть все переменные процесса старого раковины здесь со мной - включить мой маркер $ var
.
после выполнения Google или двух по этому вопросу, я думаю, что это может быть еще один способ, который стоит учитывать. Я изначально рассмотрел это, но (, по-видимому, ошибочно ) собеседна этот вариант на основе убеждения в том, что произошло принудительное ядро произвольной длины до единой ценности переменной среды - что-то вроде Аргелен или LineMax (который, вероятно, повлияет на это) , но меньше за одно значение. Тем не менее, я правильно, это то, что вызов Execve
не будет работать, когда общая среда слишком велика. И вот, я считаю, что это должно быть предпочтительным только в том случае, если вы можете гарантировать, что ваша текущая среда достаточно мала, чтобы разрешить вызов
.
На самом деле это достаточно иначе, что я сделаю все это снова в одном.
ps -pF "$$"; : {1..10000000}; ps -pF "$$"
UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
mikeserv 26296 4241 0 3957 3788 3 14:28 pts/1 00:00:00 bash -l
UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
mikeserv 26296 4241 38 472722 1878740 3 14:28 pts/1 00:00:11 bash -l
Одна вещь, которую я не смог сделать на первом раунде, - это мигрировать функции оболочки. Не считая отслеживания их самостоятельно (который, вероятно, лучший способ) , насколько мне известно, не существует портативный способ сделать это. Bash
позволяет ему допустить, хотя, поскольку объявляет -F
работает так же одинаково для функций, которые множество
делает для переменных оболочек портативно. Для этого, а также с первым методом, который вам нужно только добавить ; DECLARE -F
по установлению
в здесь документе.
Моя переменная маркера останется прежней, но вот моя функция маркера:
chk () {
printf '###%s:###\n%s\n' \
\$VAR "${var-NOT SET}" \
PSINFO "$(ps -Fp $$)" \
ENV\ LEN "$(env | wc -c)"
}
и так, вместо того, чтобы кормить новую оболочку файлового дескриптора, я вместо этого переменю двумя переменными среды:
varstate=$(set) fnstate=$(declare -f) exec "${0#-}" "-l$-"
ОК. Так что я только что заменил бегущую оболочку, так что теперь что?
chk
bash: chk: command not found
, конечно. Но ...
{ echo '###EVAL/UNSET $FNSTATE###'
eval "$fnstate"; unset fnstate
chk
echo '###EVAL/UNSET $VARSTATE###'
eval "$varstate"; unset varstate
chk
}
###EVAL/UNSET $FNSTATE###
###$VAR:###
NOT SET
###PSINFO:###
UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
mikeserv 26296 4241 10 3991 3736 1 14:28 pts/1 00:00:12 bash -lhimBH
###ENV LEN:###
6813
###EVAL/UNSET $VARSTATE###
bash: BASHOPTS: readonly variable
bash: BASH_VERSINFO: readonly variable
bash: EUID: readonly variable
bash: PPID: readonly variable
bash: SHELLOPTS: readonly variable
bash: UID: readonly variable
###$VAR:###
just
testing
'
this stuff
'
###PSINFO:###
UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
mikeserv 26296 4241 10 4056 3772 1 14:28 pts/1 00:00:12 bash -lhimBH
###ENV LEN:###
2839
Нет. Бэш никогда не вернёт операционной системе память, которую он выделяет для каких-либо целей. (Но, пожалуйста, поправьте меня, если я ошибаюсь.)
Однако, при необходимости, bash будет повторно использовать память для других целей, а если нет, то кернел подкачает её, так что на самом деле она не будет в оперативной памяти.