Параметр awk на месте с оператором печати

Наконец я решил проблему сам.

Я оставлю инструкции, что я сделал.

Проблема состоит из двух частей:

  1. К Dbus нельзя получить доступ из диспетчера Windows
  2. Демон уведомления не может получить сообщения от dbus

1-е проблемное решение:

Настоящая проблема была, что мой диспетчер Windows был запущен от lxdm, который по некоторым причинам не делает файлов конфигурации слияний от /etc/X11/xinit/xinitrc.d за исключением lxde сессии (в LXDE dbus работы, в потрясающем wm не делает). В этой папке существует названный файл 30-dbus со следующим содержанием:

#!/bin/bash

# launches a session dbus instance
if [ -z "$DBUS_SESSION_BUS_ADDRESS" ] && type dbus-launch >/dev/null; then
  eval $(dbus-launch --sh-syntax --exit-with-session)
fi

Эта часть кода определяет $DBUS_SESSION_BUS_ADDRESS переменная, которая определяет dbus порт для использования для различных приложений. echo $DBUS_SESSION_BUS_ADDRESS может использоваться в качестве простой проверки работоспособности, чтобы видеть, существует ли dbus сессия (она должна возвратить dbus файл сессии).

Файлы конфигурации от этой папки могут быть объединены с простым сценарием оболочки на сессии, запускаются (код, взятый от .xinitrc):

#!/bin/bash

if [ -d /etc/X11/xinit/xinitrc.d ]; then
  for f in /etc/X11/xinit/xinitrc.d/*; do
    [ -x "$f" ] && . "$f"
  done
  unset f
fi

2-е проблемное решение:

В то время как выполнение dbus и доступно другим программам, все еще требуется больше доступа для уведомлений для работы правильно, таким образом, я должен был выполнить polkit агент, потому что Потрясающий WM не имеет того. Я выбрал lxpolkit, потому что у меня уже была почти полная lxde среда. В моем случае, просто добавленном к моему ~/.config/awesome/rc.lua файл: awful.util.spawn_with_shell("dex /etc/xdg/autostart/lxpolkit.desktop") , по некоторым причинам без этой строки это отказалось запускаться по умолчанию с lxdm.

Я думаю, что гном polkit агент должен хорошо работать также.

4
12.05.2015, 07:20
2 ответа

Я думаю, что вам нужно использовать beginfile вместо начала и endfile вместо того, чтобы заканчиваться для начала и конца для печати в файл.

, по крайней мере, это работает на Cygwin.

Rob@Rob-PC /cygdrive/c/tmp
$ awk --version
GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.2, GNU MP 6.0.0)
Copyright (C) 1989, 1991-2014 Free Software Foundation.


Rob@Rob-PC /cygdrive/c/tmp
$ echo "11 aa
22 bb" > test

Rob@Rob-PC /cygdrive/c/tmp
$ awk -i inplace 'BEGINFILE{print "begin"} $1=="11"{print "111" $2; next} 1; ENDFILE{print "end" >> "test"}' test

Rob@Rob-PC /cygdrive/c/tmp
$ cat test
begin
111aa
22 bb
end
2
27.01.2020, 21:00

Как говорили другие, у Bourne Shell нет массивов true .

Однако в зависимости от того, что необходимо сделать, разделенных последовательностей должно быть достаточно:

sentence="I don't need arrays because I can use delimited strings"
for word in $sentence
do
  printf '%s\n' "$word"
done

Если обычных разделителей (космос, tab и newline) недостаточно, можно установить для IFS любой разделитель, который требуется перед циклом.

И если нужно построить массив программно, можно просто построить разделенную последовательность.

-121--15526-

Я понимаю, что сетевые принтеры используют протокол RAW (или Jetdirect), верно ли это?

Да. Существует два сетевых протокола для заданий печати, которые по-прежнему актуальны сегодня: LPD , запущенный на TCP-порте 515, и JetDirect , запущенный на TCP-порте 9100. LPD был разработан Беркли для BSD UNIX в старые времена. Сейчас он практически устарел, но по-прежнему доступен на многих принтерах, предположительно для совместимости со старыми серверами. JetDirect был разработан компанией HP в начале 1990-х годов, и он проще и несколько быстрее, чем LPD. Вероятно, вам следует использовать JetDirect, когда это возможно.

У меня есть RS/6000 с AIX 5, который находит и работает с любым видом «собственного» сетевого принтера. И я хотел бы выставить в сети USB-принтер как сетевой принтер (автономное устройство), используя для этого Linux (предпочтительно Debian).

Установите CUPS на машину Linux и подключите к ней принтер. Вам даже не нужна полная машина для этого, Raspberry Pi или подобный, или домашний маршрутизатор с USB-портом и под управлением OpenWRT или DD-WRT, будет работать просто нормально.

-121--55159-

Циклы BEGIN и END выполняются до обработки файла и после его полной обработки. Функция -i inplace имеет смысл только во время обработки файла. Я не могу быть уверен без проверки исходного кода, но поэтому кажется разумным, что BEGIN и END не будут работать здесь.

Как уже было предложено, для этого используются BEGINFILE и ENDFILE . Если они не работают в вашей настройке, вам придется использовать обходные пути. При простом совпадении первой строки (, если (NR = = 1) {print «begin»} ), совпадение последней строки немного сложнее. Некоторые приемы можно использовать:

  1. Добавьте начальную и конечную строки с помощью другого инструмента:

     perl -i -007ne 'print «begin\n $ {_} end\n»' file & &
    awk -i inplace '$1 = = «11» {print «111» $2; следующий файл} 1; '
    

    или

     printf «begin\n% s\nend» «$ (cat-файл)»
    
  2. Используйте awk для «begin» и добавьте «end» позже:

     awk -i inplace 'NR = 1 {print «begin»} $1 = «11» {print «111» $2; следующий} 1; 'файл & &
    echo «end» > > файл
    
  3. Сделайте все это с помощью инструмента, который может понять это . Переключатель Perl's -a выполняет функцию awk : разделит поля в пробельном пространстве на массив @ F . Точно как awk , -Переключатель F позволяет установить разделитель полей. Переключатель -i редактирует файл по месту:

     perl -i -lane '$. = = 1 & & print «begin»; eof & & print «конец»;
    если ($ F [0] = «11») {print «111 $ F [0] $ F [1]»; следующий} файл печати; '
    
0
27.01.2020, 21:00

Теги

Похожие вопросы