LINUX.ORG.RU
ФорумTalks

А почему так много утилит не соблюдают UNIX-way?

 


1

4

Банально — sudo -i. Зачем этот флаг? Зачем этот функционал? sudo su или sudo bash хватает с головой.

Куча утилит принимают на вход имя файла.Зачем этот функционал? Ведь любой shell умеет перенаправление. И оно выглядит во всех командах одинаково.

Для чего каждая утилита городит кучу велосипедов, если проще и изящнее это всё делать с помощью других утилит.

Что интересно — похоже это естественно для человека — думать с стиле UNIX. Потому что многие люди пишут cat bla | grep foo на автомате. Логично было бы поощрять этот подход, выкидывать лишний дублирующийся код из утилит.

★★★★★

лорчую. но sudo -i короче, и, ЕМНИП, там какие-то отличия таки есть

sudopacman ★★★★★
()
cat file | sed 's/.../.../' > file.bak; mv file.bak file

вместо

sed -i 's/.../.../' file
? очевидно. С другой стороны, можно было б нечто вроде:
mdfynp sed 's/.../.../' file

Deleted
()

Ващет люди думают в gui, а не строках команд..

ну не было во времена Юникса графики мощной, вот и выдумали конвейеры 6-))

Deleted
()
$ ls -lh foo.txt
-rw-r--r-- 1 foobar users 94M окт 11 20:41 foo.txt
$ time (cat foo.txt | grep bar) > /dev/null

real	0m0.230s
user	0m0.076s
sys	0m0.094s
$ time (grep bar foo.txt) > /dev/null

real	0m0.116s
user	0m0.069s
sys	0m0.044s
Darth_Revan ★★★★★
()

cat bla | grep foo

А если нужно grep зразу по нескольким файлам, с разной глубиной их нахождения в папках ? Разве можно как-то ещё кроме grep -R ? Если да, то что из этого будет более костыльно ?

sudopacman ★★★★★
()
Ответ на: комментарий от Deleted

Ващет люди думают в gui, а не строках команд

А это кто как. Всё зависит от привычки. Если человек привык к GUI настолько, что у него пальцы к мышке приросли, то, конечно, он и будет думать соответственно. А если, наоборот, у человека нет никакого GUI и он привык работать исключительно в консоли, то он и будет думать в командах командной строки.

saahriktu ★★★★★
()
Ответ на: комментарий от sudopacman
find . -type f -exec | xargs -n1 cat | grep foo

если я тебя правильно понял.

Вообще было бы неплохо, если бы можно было делать что-то вроде

grep foo < (ls -R)
было бы куда лаконичней.

Если да, то что из этого будет более костыльно ?

Речь не про костыли, а про дублирование. Причём как физическое (каждая утилита пишет свою версию рекурсивного обхода директорий со своими неповторимыми багами, но это ладно), так и ментальное (предполагается, что пользователь должен помнить параметры каждой утилиты в каждом случае).

Legioner ★★★★★
() автор топика
Последнее исправление: Legioner (всего исправлений: 2)

UNIX-way мёртв, вот почему.

sudo bash и sudo su делают совсем не то же самое, что sudo -i. sudo -s ещё куда бы ни шло.

Логично было бы поощрять этот подход, выкидывать лишний дублирующийся код из утилит.

Вперёд, что. Можешь plan9port потыкать.

x3al ★★★★★
()
Ответ на: комментарий от sudopacman

А если нужно grep зразу по нескольким файлам, с разной глубиной их нахождения в папках ? Разве можно как-то ещё кроме grep -R ?

grep 'whatever you need' **/* же. И можно ограничивать поиск по суффиксу (например, только в .h). Требует рекурсивного глоббинга в шелле, но стоит того: лично я не юзаю -R вообще.

x3al ★★★★★
()
Ответ на: комментарий от sudopacman

Ты просто недостаточно часто видишь мои посты :}

Deleted
()
Ответ на: комментарий от sudopacman

Нихрена себе, только сейчас узнал об этой фиче ) Спасибо.

leave ★★★★★
()
Ответ на: комментарий от leave

By default, ag will ignore files whose names match patterns in .gitignore, .hgignore, or .agignore. These files can be anywhere in the directories being searched. Ag also ignores files matched by the svn:ignore property if svn --version is 1.6 or older. Finally, ag looks in $HOME/.agignore for ignore patterns. Binary files are ignored by default as well.

If you want to ignore .gitignore, .hgignore, and svn:ignore, but still take .agignore into account, use -U.

А в остальном — grep как grep, только лучше.

x3al ★★★★★
()

Иногда утилиты вызываются не из шелла. В общем, бывает, что так удобнее. Ну и любую идею (unix-way) можно довести до абсурда. Как HIG в гноме =)

anonymous_incognito ★★★★★
()

Утилиты перестали поддерживать конвейер и хорошо работать в базовых задачах?

Quasar ★★★★★
()
Ответ на: комментарий от Legioner

find . -type f -exec | xargs -n1 cat | grep foo

если я тебя правильно понял.

а теперь выведи имя файла и номер строки в котором совпадение.

vtVitus ★★★★★
()

Меня из такого больше всего смущает sort -u против sort | uniq.

CYB3R ★★★★★
()
Ответ на: комментарий от vtVitus

Вот для этой задачи «выведи имя файла и номер строки» было бы как раз неплохо задействовать cat. В нём есть флаг для номера строки, но нет флага для имени файла, а его добавить как раз следовало бы.

Legioner ★★★★★
() автор топика
Ответ на: комментарий от Legioner

философия unix это и «Правило простоты: Нацельтесь на простоту; добавляйте сложность, только где необходимо.»

а ты предлагаешь несколько команд с хитрыми ключами, заместо одной, которая хорошо ищет и выводит результат в удобном виде.

vtVitus ★★★★★
()
Ответ на: комментарий от vtVitus

А если тебе надо не искать, а ещё что-то делать и нужен вывод в таком же виде? Мне вот grep-а не хватает, я иногда делаю find . -type f -exec cat -n {} \; | less и в результате уже ищу туда-сюда, изучая контекст. Имена файлов мне бы пригодились.

Для меня простота это изучить несколько кирпичиков и строить из них сложные конструкции, а не запоминать на каждую задачу свои отдельные решения.

Legioner ★★★★★
() автор топика
Ответ на: комментарий от Legioner

Для меня простота это изучить несколько кирпичиков и строить из них сложные конструкции, а не запоминать на каждую задачу свои отдельные решения.

так строй. unix-way это в том числе и возможность строить команды как тебе нравится, мульёном способов.

find /tmp/ -type f -exec awk '{print FILENAME " " NR ":" $0}' {} \; | less

vtVitus ★★★★★
()
Ответ на: комментарий от Legioner

В том числе и такие :D :D :D :D

find /tmp/ -iname '*.txt' -type f -printf "echo %p && cat -n %p\n" 2>/dev/null | sh | less

всё ограничивается исключительно фантазией :)

vtVitus ★★★★★
()
Последнее исправление: vtVitus (всего исправлений: 3)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.