Хорошо я нашел решение: смонтируйте каталог с помощью cifs, а не smbfs, и он работает! Я добавил следующую строку к fstab:
//windows-computer/share /home/jj/smbShare cifs username=jj,password=***,perm,iocharset=utf8,uid=jj,gid=users,nounix,noserverino 0 0
Чтобы постараться не помещать Ваш пароль Windows в fstab файл, можно использовать учетный файл: http://anothersysadmin.wordpress.com/2007/12/17/howto-mount-samba-shares-in-fstab-using-a-credential-file/
Можно записать среду в файл с export -p
и читайте его назад периодически в других экземплярах с .
(включать команда). Но как Вы отмечаете, если будут параллельные модификации, то результат не будет симпатичен.
Если Вы хотите, чтобы модификации распространили немедленно, необходимо будет использовать обертку вокруг export
встроенный, который также распространяет изменения в других оболочках. На Linux можно использовать flock
утилита.
global_export () {
{
flock 0
. /path/to/env
[ $# -eq 0 ] || export "$@"
export -p >/path/to/env
} </path/to/env
}
Обратите внимание, что необходимо будет звонить global_export
каждый раз, когда Вы присваиваете новое значение экспортируемой переменной.
Это довольно неуклюже. Вероятно, что существует лучший способ решить Вашу проблему. Самый очевидный путь состоит в том, чтобы иметь любую команду, использует те, которые переменная среды считала конфигурационные файлы вместо этого.
В дополнение только к использованию flock
из ответа Giles я сделал бы что-то подобное следующему:
Зарегистрируйте обработчик сигналов для перезагрузки файла:
reload_env() {
flock -s 3
. /path/to/env
flock -u 3
}
trap reload_env USR1
Функция, чтобы выписать файл и отправить a SIGUSR1
ко всем оболочкам, уведомляющим их для перезагрузки файл:
export_env() {
flock 3
export -p >/path/to/env
flock -u 3
fuser -k -USR1 /path/to/env
}
Откройте файл, но ничего не сделайте с ним. Это именно так что fuser
сможет сигнализировать об этой оболочке:
exec 3>>/path/to/env
Порядок несколько важен. По крайней мере, exec ...
часть должна быть после trap ...
часть. Иначе мы могли открыть файл и затем сообщаться fuser
звоните, прежде чем мы зарегистрировали наш обработчик сигналов.
Примечание: Код полностью не тестируется, но принцип стоит.
NOTE2: Этот пример кода предназначен для удара.
С fish
оболочка, используйте универсально ограниченные по объему переменные:
set -U var value
Конечно, тот единственные работы через fish
оболочки выполняются тем же пользователем.
Если Вы хотите связать его с основным pid, включайте его в имя переменной
set -U m${masterpid}var value
Я хотел бы указать на Вас на именованные каналы с этой целью. Вот один аккуратный пример для рассмотрения.
Именованные каналы создаются командой:
mkfifo pipe_name
Можно просто записать в него:
echo "This text goes to the pipe" > pipe_name
С другой стороны, можно читать из канала как:
read line < pipe_name;
echo $line
Можно создать несколько каналов на основе того, сколько делают оболочки Вы хотите, чтобы они связались. Хорошие вещи о каналах состоят в том, что они не просто переменные. Можно на самом деле передать любые данные между процессами. Можно передать целые файлы, строки текстов, независимо от того, что Вы желаете. Я верю с этим в памяти, можно упростить сценарии много. Я могу вообразить, если Ваши переменные указывают на местоположение данных или файл, и другой сценарий должен будет считать или получить их, можно непосредственно передать данные/файл, даже не нуждаясь в переменной.
Если ksh93 является опцией, существует определенно способ реализовать то, что Вы хотите с методом считывания и функциями дисциплины метода set, которые получали бы/хранили бы значение переменной из/в совместно используемую память.
См. https://stackoverflow.com/questions/13726293/environment-variables-to-be-used-across-multiple-korn-ksh93-shell-scripts-get для деталей
В отличие от в других отношениях полезного fish
универсальная функция переменных, у Вас есть доступ к реализации, таким образом, можно ограничить совместное использование значения группой процессов, связанных с основным pid через некоторый механизм в варианте использования, при хранении единственного имени к переменной.
bash
список пожеланий. bash
использование для выбора более поздних функций ksh
сначала реализованный.
– jlliagre
21.09.2013, 10:39
Принятие во внимание комментариев, что Вы хотите основной IPC между сценариями оболочки. Я просто записал бы в файлы (с переименовыванием для атомарности)
varf=$(mktemp ./myvars.XXXXXX)
echo myvar=newval > $varf
mv -T -- $varf ./myvars
И имейте источник читателей./myvars периодически.
IPC намного легче с, например, Python и многопроцессорный модуль.
Существует также этот ScriptEchoColor проекта:
Это может автоматический создавать и справляться для Вас, текстового файла DB. На сценарии первого показа будет создан файл BD, другие сценарии будут символьная ссылка на тот файл как их собственный DB для управления значениями переменных, и таким образом, оба смогут обмениваться информацией.
Простой пример совместного использования с этими файлами там в папке в качестве примера: secExplShareEnvVarsA.sh, secExplShareEnvVarsB.sh
И синхронизируемый (безопасное и последовательное чтение-запись) совместно использовал доступ DB там также: secExplSyncedShareEnvVarsA.sh, secExplSyncedShareEnvVarsB.sh