Одинарные кавычки не имеют никакого особого значения в регулярных выражениях и так как Ваш шаблон уже включается в двойные кавычки, нет никакой причины выйти из них. Так как они не специальные символы, выходить из них не работает и завинтит Ваш шаблон.
Поэтому все, в чем Вы нуждаетесь, "\$form\['"
:
$ cat file.txt
$form['#node']
abc$form['#node']abc
123$form['#node']123
blah blah $form['#node']
someotherstring
$ grep "\$form\['" file.txt
$form['#node']
abc$form['#node']abc
123$form['#node']123
blah blah $form['#node']
Вы можете использовать lsof
, чтобы увидеть, какие процессы используют файл. В вашем случае:
$ lsof /dev/dvb/adapter0
$ lsof /dev/dvb/adapter1
Каждый вызов даст вам список процессов, запросивших обработчик (дескриптор файла) к вашему устройству. Если ничего не выводится на печать, вы можете сделать вывод, что ваше устройство в данный момент не используется. Вот пример с /dev/urandom
, используемый Conky, Chromium и Thunderbird в моей системе:
$ lsof /dev/urandom
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
conky ---- ---- 3r CHR 1,9 0t0 1034 /dev/urandom
chromium- ---- ---- 55r CHR 1,9 0t0 1034 /dev/urandom
thunderbi ---- ---- 24r CHR 1,9 0t0 1034 /dev/urandom
r
(в поле FD) означает, что процессы запросили доступ на чтение: номер дескриптора непосредственно перед этим является номером их дескриптора. CHR
и 1,9
- это тип устройства и номер дескриптора. 0t0
является текущим смещением файла для этого дескриптора, а 1034 является кодовым номером файла устройства (в моей системе).
Более подробную информацию об этом выводе смотрите в lsof(8)
. Кстати, lsof
возвращает другой код статуса в зависимости от того, нашел ли он процессы для файла или нет. Это означает, что вы можете использовать его достаточно просто в скрипте оболочки:
#!/bin/bash
if lsof /dev/dvb/adapter0 > /dev/null 2>&1; then
echo "Adapter 0 is in use."
elif lsof /dev/dvb/adapter1 > /dev/null 2>&1; then
echo "Adapter 1 is in use."
else
echo "No adapter is in use."
fi