Возможно, модули звукового драйвера и/или демон PulseAudio не загружены, если (virtual? )звуковая карта отсутствовала во время установки Debian.
Используйте lspci
или lsusb
в зависимости от ситуации, чтобы убедиться, что звуковая карта видна на виртуальной машине. Затем просмотрите /proc/asound
для получения информации о звуковых устройствах с функциональными драйверами и dmesg
для получения сообщений об ошибках, которые могли быть вызваны сбоем в автозагрузке звукового модуля.
Если у вас минимальная установка, вам может потребоваться запустить apt-get install pulseaudio
, чтобы установить и запустить полный набор звуковых служб.
Согласно выходным данным cat /proc/asound/modules /proc/asound/cards /proc/asound/devices
,у тебя должно быть:
/dev/snd/controlC0
для управления аудиомикшером, /dev/snd/pcmC0D0p
и /dev/snd/pcmC0D1p
для аудиовыхода и /dev/snd/pcmC0D0c
для аудиовхода. /dev/snd/seq
и /dev/snd/timer
для интерфейсов MIDI и таймера соответственно. Если некоторые или все из них отсутствуют, это может быть проблемой с udev
... но тогда ваше утверждение о том, что карта работает правильно, сбивает с толку :, если узлы устройства действительно отсутствуют, насколько я знаете, тогда не должно быть возможности передать звуковые данные драйверу. Вы уверены, что не работаете в среде с chroot, сеансом SSH с другим хостом или чем-то еще, что может показывать вам другое представление дерева каталогов /dev
?
Следующий скрипт принимает имя файла в качестве параметра и проверяет, состоят ли первая и последняя строки только из X символов
#!/bin/bash
echo First line
if [ "$(head -n 1 $1 | grep '^X\+$')" == "" ]; then
#echo something else than X found in the first line
echo no
else
#echo only X found in the first line
echo yes
fi
echo Last line
if [ "$(tail -n 1 $1 | grep '^X\+$')" == "" ]; then
#echo something else than X found in the last line
echo no
else
#echo only X found in the last line
echo yes
fi
Из-за заголовка («… если строка содержит только определенные символы» )Я предполагаю, что «только X
» означает «только X
символ с », не строго "только один X
символ".
С sed
. Позвольте мне начать с проверки последней строки, потому что она более общая :
sed -n -e '$ ! d' -e '/^X*$/ ino' -e '/^X*$/ ! iyes' -e '$ q'
Для проверки N --й строки замените $
в первом и последнем выражениях на N. Например,. для N=5:
sed -n -e '5 ! d' -e '/^X*$/ ino' -e '/^X*$/ ! iyes' -e '5 q'
N=1 можно упростить, потому что в этом случае нам не нужно первое выражение, а последнее может быть простоq
:
sed -n -e '/^X*$/ ino' -e '/^X*$/ ! iyes' -e q
Примечания:
Если нет N --й строки, то и вывода не будет.
Благодаряq
sed
выходам при первой возможности (строки после N --го не обрабатываются ).
Вы можете использовать ^XX*$
вместо ^X*$
. Они будут генерировать разные выходные данные, если рассматриваемая строка окажется пустой. Чтобы проверить, является ли строка точно X
, используйте ^X$
.
В общем случае N появляется дважды и ^X*$
появляется дважды. Это не DRY , но вы можете использовать переменные оболочки:
N='$'
pattern='^X*$'
sed -n -e "$N ! d" -e "/$pattern/ ino" -e "/$pattern/ ! iyes" -e "$N q"
Так же, как и в моих предыдущих ответах на ваши вопросы(здесь и здесь):Удалить все остальные строки и заменить текущую строку строкой yes
или no
в зависимости от от того, содержит ли он какой-либо другой символ, кроме одиночногоX
.
sed '1!d; s/^X$/no/; t; s/.*/yes/' file
Шаблон ^X$
соответствует одиночному X
в строке, поэтому первая замена заменит всю строку строкой no
, если в ней есть только один символ X
. Команда t
сама по себе пропускает остальную часть скрипта, если последняя команда s///
внесла изменения.
Чтобы просмотреть последнюю строку, используйте $
вместо 1
в коде sed
:
sed '$!d; s/^X$/no/; t; s/.*/yes/' file
С помощью AWK
проверка первой строки:
awk '{ print $0!="X"?"yes":"no"; exit }' infile
то же самое для проверки последней строки:
awk 'END{ print $0!="X"?"yes":"no" }' infile
и проверив N -ю строку (, замените N
вNR==N
номером строки -, который вы хотите проверить, это только X
или нет;NR==line#
):
awk 'NR==N{ print $0!="X"?"yes":"no"; exit }' infile
Если вы хотите также рассмотреть строки, которые могут содержать символы NUL (или, в более общем случае, не -текст, который также включает последовательность байтов, не образующих допустимых символов, или строки длиннее LINE_MAX
, или строки, не разделенные символом символ новой строки ), возможно, вам придется переключиться на zsh
, так как другие оболочки не справляются с этим легко, а текстовые утилиты не гарантируют, что:
#! /bin/zsh -
if IFS= read -r line < file; then
case $line in
("") print -u2 empty;
(*[^X]*) print -u2 does not contain only Xes;;
(*) print OK, only Xes;;
esac
else
print -u2 a full lines could not be read
fi
Или прибегнуть кperl
:
perl -e '
open FILE, "<", "file" or die "Cannot open: $!\n";;
$_ = <FILE>;
die "a line could not be read\n" unless defined $_;
die "a full line could not be read\n" unless /\n$/;
chomp;
die "does not contain only Xes\n" if /[^X]/;
print "OK, only Xes\n"'