Ключевое событие сгенерировано X-сервером (как настроено xmodmap
), и отправляется в Ваши X приложений. Ваш менеджер окон мог прервать это, прежде чем он будет отправлен в xterm. XTerm, в свою очередь, переводит событие в некоторые байты и отправляет байты в pseudo-tty, выделенный Вашей оболочкой, ударом.
Обратите внимание на то, что не все события переводятся непосредственно в байты XTerm. Например, Ctrl и клавиши Shift, собой, генерируют X событий клавиатуры, но XTerm ничего не отправляет в оболочку (или другое приложение) работающий в нем. Это также включает Метаклавишу отдельно, но не Клавишу меню. Однако событие, сгенерированное путем нажатия Meta-e, заставит XTerm отправить или байт 0xE5 или двухбайтовый 0x1B 0x65 последовательности, в зависимости от XTerm. Установка ресурса VT100.metaSendsEscape.
Первое соответствие против всех файлов и проверка, если .out файл существует, то печатают имя:
for x in *; do
if [[ "$x" =~ ^(.*)\.in ]] && [[ -f ${BASH_REMATCH[1]}.out ]];then
echo -n "$x ${x%%.in}.out ";
fi
done
echo
Так как Вы хотите .in
быть соединенным с .out
, цикл через только *.in
и проверьте, существует ли соответствие .out
файл, если так, распечатывает обоих:
for f in *.in; do
if [[ -f ${f%.in}.out ]]; then
echo $f
echo ${f%.in}.out
fi
done
for f in *.in; do [[ -e ${f%.in}.out ]] && echo $f ${f%.in}.out; done
– rsaw
26.11.2012, 17:03
С zsh:
has_out() [[ -e $REPLY:r.out ]]
ls -ld -- *.in(+has_out)
Можно перечислить все те файлы, удалить расширения, дубликаты фильтра и распечатать их:
$ ls | grep '\(\.in\|.out\)$' | sed 's/....$//' \
| sort | uniq -c | grep '^[\t ]*2' | sed 's/^[\t ]\+2 //'
Преимущества:
[[ -f ... ]]
)В случае, если ls
уже в алфавитном порядке сортирует его вывод sort
команда может быть удалена из канала. Я не знаю, указывает ли POSIX поведение сортировки a ls
.
Канал печатает все базовые имена если файлы с .in
и .out
расширение.
Если Вам затем нужен список соответствующих файлов, необходимо снабдить суффиксом список ранее фильтрованные расширения. Например, как это:
$ ls | grep '\(\.in\|.out\)$' | sed 's/....$//' \
| sort | uniq -c | grep '^[\t ]*2' \
| sed -e 's/^[\t ]\+2 //' -e 's/$/.in/ ; p; s/in$/out/'
BASH_REMATCH
массив является потрясающим. Niiice! PS: Вы могли упростить это в одно[[ ... && ... ]]
выражение. – rsaw 26.11.2012, 05:44[[ ... && ...]]
обрабатывается как ожидалось. Смотрите на страницу справочника удара под[[ expression ]]
раздел. – rsaw 26.11.2012, 16:58