С тех пор sed
находится в Ваших тегах, вот a sed
ответ:
sed '/[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+/s/\.[0-9]\+$/.0/'
Если у вас есть контроль над зависимостями (т. е. они являются вашим программным обеспечением), сделайте так, чтобы они установили файл для данного файла устройства. То есть, допустим, у вас есть foo.service
, который должен зависеть от bar.service | | baz.service
.
Затем пакет bar
может установить файл /usr/lib/systemd/system/foo.service.d/50-bar-baz.conf
со следующим содержимым:
[Unit]
Requires=bar.service
Аналогично для пакета baz
.
Если у вас нет контроля над зависимостями, просто создайте сценарий «dispatcher», который проверяет наличие файлов единиц измерения, а затем запускает exec systemctl
для выбранного файла единиц измерения. Тогда напишите отдельную единицу и требуйте/после нее из основной единицы:
[Unit]
# inexistent unit names are ignored here
After=bar.service baz.service
[Service]
Type=oneshot
ExecStart=/path/to/dispatcher
-121--195530- Много хороших ответов, но позвольте мне добавить еще одну вещь... Помните, что Unix является многопроцессорной и многопользовательской системой, поэтому потенциально многие пользователи будут пытаться выполнять файловые операции (например, запись) в (почти) одно и то же время. Со старыми медленными жесткими дисками - возможно, установленными по сети - это не только займет время (для чего программы в основном заблокированы, а пользователям приходится ждать), но и вызовет большое количество перемещений головки чтения/записи диска туда и обратно.
Поэтому файлы, ожидающие записи, некоторое время хранились в памяти и отсортировались после того, как они должны оказаться на диске... и когда буфер был заполнен - или демон дисковой синхронизации ждал необходимого количества секунд (я думаю, что обычно это было около 30 секунд) - весь буфер был выписан на диск «в порядке», причем головке записи приходилось делать только одно непрерывное размашистое движение, записывая файлы на диск, как он пошел... вместо того, чтобы прыгать по всему месту.
Из-за современных быстрых дисков - не говоря уже о твердотельных устройствах - выигрыш намного меньше... особенно на домашней linux-системе, где одновременно работает только один пользователь, и только с несколькими программами.
В любом случае, комбинация ожидающего чтения путем чтения в (в кэш/буфер) больше, чем было запрошено, - и сортировки данных, ожидающих записи, чтобы они могли быть записаны в «одном движении» - была на самом деле очень хорошей идеей в то время, особенно в системах с большим количеством чтения и записи многими пользователями.
-121--5671- Я полагаю, что TERM
наборы в linux
для процесса инициализации (pid 1) ядром Linux здесь и там . Вы можете увидеть его в /proc/1/environ
(извините, что следующий вывод из Ubuntu 15,04):
$ sudo strings /proc/1/environ
HOME=/
init=/sbin/init
recovery=
TERM=linux
BOOT_IMAGE=/boot/vmlinuz-3.19.0-25-generic.efi.signed
PATH=/sbin:/usr/sbin:/bin:/usr/bin
PWD=/
rootmnt=/root
В системах на основе Debian/Ubuntu systemd он распространяется на дочерние процессы getty по определениям в /lib/systemd/system/getty @ .service
.
[Service]
# the VT is cleared by TTYVTDisallocate
ExecStart=-/sbin/agetty --noclear %I $TERM
Таким образом, можно переопределить TERM
в командной строке ядра. Попробуйте изменить /etc/default/grub
и запустите update-grub
и перезагрузите компьютер.
GRUB_CMDLINE_LINUX="TERM=vt100"
Переменная $ TERM обычно устанавливается в / etc / profile или .bashrc зависит от дистрибутива ur с использованием.
Прочтите http://www.tldp.org/HOWTO/Keyboard-and-Console-HOWTO-11.html