- 1
- 2
~ >>> ls -1 text.txt | xargs cat
cat: ''$'\033''[0m'$'\033''[00;32mtext.txt'$'\033''[0m': No such file or directory
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
0
~ >>> ls -1 text.txt | xargs cat
cat: ''$'\033''[0m'$'\033''[00;32mtext.txt'$'\033''[0m': No such file or directory
Ну охуеть теперь.
zsh c подстветкой синтаксиса бля.
кастую СёмаРиал, объясни, что надо сделать с терминфо
А если вручную его ставить, то тоже можно в принципе добиться настройками такого алиаса, наверное (там такая запускается ncurses прога с чекбоксами после установки)
Хотя, подчёркиваю, там не --color=always было, а просто --color интерптерируется как always, так что проблема может быть и глубже
Надо поискать, на кого грешить
так что always это по умолчанию.
Помотри файлы профиля (я не знаю как он у zsh называется, ну тот, что у bash ``profile``), там где-то
можно переустановить zsh, попросив явно спросить тебя про все измененные конфиги, и тогда ты узнаешь, насрал ли ты, или по умолчанию так было
``
apt-get --reinstall -o Dpkg::Options::="--force-confask" install zsh
``
покажи
``type ls``
Обычный ls во всех известных мне cсистемах умеет делать подсветку (LS_COLORS итд).
однако ls обычно знает, куда смотрит его stdout: в терминал, или в пайп к другой программе. Он проверяет это посредством ``isatty(3)``, передавая туда stdout.
Так вот если stdout связан с пайпом, то он конечно ничего не красит.
А если с терминалом, то он использует terminfo для раскраски.
гнушный ls имеет опцию --color=always, чтобы писать цветом даже тогда, когда нет терминала
Вот реализация
https://github.com/wertarbyte/coreutils/blob/master/src/ls.c#L1892
Документация есть в мане по ``ls(1)``
Так что либо ls это встроенная команда zsh (и тогда нужно читать ман зиша), либо гнушному ls передают color=always.
Это мы узнаем, когда ты сделаешь type ls
Откуда ты все эти команды знаешь?
P.S. На убунте показало aliased to `ls --color=auto'.
Про нее даже статья есть
https://en.wikipedia.org/wiki/Type_(Unix)
Интересно, что type есть в sh и bash, а в ksh нету.
Зато везде есть ``command -V``, лол.
всё это есть в man bash на самом деле, но он размером примерно с Войну и Мир.
Есть хороший хауту
https://tldp.org/LDP/abs/html/
там описывается, например, process substitution, про который не все знают.
Его всё таки приятнее читать.
Еще я помню читал вот такую книжку
https://readli.net/linux-i-unix-programmirovanie-v-shell-rukovodstvo-razrabotchika/
и вроде как раз ``type`` подрезал оттуда. Она древняя, но годная.
Кстати, bg/fg (это "job control" называется) изначально появился в csh на BSD: у AT&T в sh его не было.
А потом bash и ksh его подрезали из csh
Например, как догадаться о существовании опции ``-mount`` у ``find`` (она позволяет не пересекать границы файловых систем) или о sticky bit у каталога (он запрещает удалять чужие файлы даже если есть права на запись в каталог) или о том же process substituion, представляющем stdout команды как файл?
Пока сидишь на горшке -- читаешь маны или книжечки про всякое говно, оно и откладывается в голове
type ls
ls is an alias for ls --color
а в баше
type ls
ls is aliased to `ls --color=auto'
Вот именно из-за отсутствия auto zsh и не убирал эскейпы при передаче в xargs.
Помогло alias ls="ls --color=auto"
спустя некоторое время оказалось, что надо отдельно ставить bash-completion
% type ls
ls is /bin/ls
``ls --color``
а потом просто ``ls``
отличается?
https://linux.die.net/man/1/dircolors
в дебиане например в профайле он читает файлы из ``.dircolors``, можно раскрасить себе .php файлы коричневый цвет, например
% ls --color
ls: illegal option -- -
я думаю, это ls, патченный эпплом, как и всё остальное у них
но если ls у них от freebsd, то вероятно -G
что у тебя за процентик? это не баш?
С -G раскрасило, да.
Вывод: некуй гуглить, надо читать маны
А у линукса (точнее у гну) И те И другие, но не целиком