Это зависит от Вашей конфигурации: можно было запустить Сервер X-окна отдельно, и затем процесс менеджера по оформлению или менеджер по оформлению могли запустить сервер X-окна.
Мне запустил X-сервер kdm в OpenSuse 12.1:
kdm(4655)─┬─Xorg(4671)
└─kdm(4698)───startkde(4800)─┬─gpg-agent(4877)
├─kwrapper4(4977)
└─ssh-agent(4878)
Если Вы используете Unix
с Xorg
и pstree
можно проверить:
pstree -p `ps -H -C Xorg -o ppid --no-header`
или
ps -H -C Xorg -o ppid --no-header | xargs pstree -p
Что-то вроде этого должно работать на Вас:
ls /a | egrep "^[0-9]"
На @Anthons обратную связь egrep
удерживается от использования, таким образом, можно использовать -E
как переключатель к нормальному grep
команда вместо этого:
ls /a | grep -E "^[0-9]"
На обратную связь @Stephane расширенные регулярные выражения (ERE's) даже не необходимы в этой ситуации. Действительно то, что имеет значение, является заключением в кавычки ^[0-9]
защищать его от того, чтобы быть интерпретируемым любой версией /bin/sh
Вы используете, это имеет проблему. Таким образом, что-то вроде этого было бы самой простой фиксацией к Вашей проблеме:
ls /a | grep "^[0-9]"
- или -
ls /a | grep '^[0-9]'
sh
, Я думаю, что Вы обращаетесь к Оболочке Bourne, которая была оболочкой большинства систем Unix перед серединой 90-х и была /bin/sh
на Солярисе до Соляриса 11.
На Солярисе 10 и более старый, не использовать /bin/sh
. Та оболочка с другой эры. Использовать /usr/xpg4/bin/sh
вместо этого.
В Оболочке Bourne ^
псевдоним для |
для совместимости с его предшественником оболочка Thompson. Таким образом, Ваша команда похожа:
ls /a|grep |[0-9]
И Оболочка Bourne сообщает, что не может найти команду названной [0-9]
и grep
жалуется на не получение любого аргумента.
Даже если использование стандарта sh
в противоположность Оболочке Bourne я рекомендовал бы заключить в кавычки ^
. Например, ^
globbing оператор в zsh
когда extendedglob опция включена.
В любом случае, если нет ^
, необходимо заключить в кавычки [0-9]
так как это - globbing операторы. [0-9]
был бы расширен оболочкой до списка файлов в текущем каталоге, имя которого является единственной цифрой.
Так:
ls /a | grep '^[0-9]'
Кстати, в Оболочке Bourne
ls /a ^ grep '^[0-9]'
также работал бы.
Вам не нужно ls
и grep
для этого; можно использовать простой шарик /a/[0-9]*
:
echo /a/[0-9]*
ls /a/[0-9]*
grep foo /a/[0-9]*
Если Вы используете это в сценарии, остерегаетесь того парсинга ls
вывод является плохой идеей.
Я соглашаюсь с l0b0 grep, плохая идея здесь, но так или иначе, здесь объяснение проблемы и обходное решение. На Солярисе 10 и более старый, /bin/sh
устаревшая оболочка, которая не должна использоваться ни для чего кроме запущения скриптов прежней версии. Действительно необходимо использовать ksh
, bash
или /usr/xpg4/bin/sh
вместо этого.
Первопричина здесь ^
используемый, чтобы быть исходным способом указать канал в ранние времена Unix. Солярис /bin/sh
наследованный эта archaelogical функция.
Обходное решение затем довольно просто, просто выйдите из каре один из этих путей:
ls /a |grep \^[0-9]
или
ls /a |grep "^[0-9]"
или
ls /a |grep '^[0-9]'
^0
и ^1
файл в текущем каталоге все же. Вы побеждаете меня на 7 секунд на источнике ;)
– Stéphane Chazelas
05.06.2013, 16:38
ls /a | grep '^0' '^1'
. Таким образом, это искало бы строки, запускающиеся с 0
в ^1
и проигнорируйте вывод ls
.
– Stéphane Chazelas
05.06.2013, 19:49
egrep
удерживается от использования (согласно странице справочника), должен рекомендовать использованиеgrep -E
– Anthon 05.06.2013, 16:01bash
интерпретирует тех, которые вместоgrep
. Я был удивлен, что Вы могли передать те аргументы, пустые как этот w/o двойные кавычки. Я только когда-либо дважды заключал им в кавычки кgrep
. Вы, возможно, также поместили одинарные кавычки вокруг них также. – slm♦ 05.06.2013, 16:04e
или-E
являются лишними. – Stéphane Chazelas 05.06.2013, 16:47