1. bash / Говнокод #27263

    0

    1. 1
    2. 2
    ~ >>> ls -1 text.txt | xargs cat
    cat: ''$'\033''[0m'$'\033''[00;32mtext.txt'$'\033''[0m': No such file or directory

    Ну охуеть теперь.

    zsh c подстветкой синтаксиса бля.
    кастую СёмаРиал, объясни, что надо сделать с терминфо

    Запостил: vistefan, 18 Февраля 2021

    Комментарии (55) RSS

    • --color=never или --color=auto добавь в аргументы ls. А вот какого хуя оно по-умолчанию включено -- вопрос открытый, возможно переменная какая-то или алиас кое-кто накрутил.
      Ответить
      • З.Ы. У меня на убунте ls по-умолчанию заалиасено на ls --color=auto и при редиректе никаких цветов нету. Походу в твоём дистрибе какой-то ебанат прописал always вместо auto.
        Ответить
      • ну ты понел, дефолтный зсш алиас без авто почему-то
        Ответить
        • Странно, я вот сейчас на убунте zsh запустил, вообще ничего про color'ы нету (ls is /bin/ls). Видимо или в дистрибе косяк или ты сам накрутил в конфиге да не заметил.
          Ответить
          • косяк в манджарном преднастроенном zsh (я его не менял)
            А если вручную его ставить, то тоже можно в принципе добиться настройками такого алиаса, наверное (там такая запускается ncurses прога с чекбоксами после установки)
            Хотя, подчёркиваю, там не --color=always было, а просто --color интерптерируется как always, так что проблема может быть и глубже

            Надо поискать, на кого грешить
            Ответить
            • --color[=WHEN]
                            colorize  the output; WHEN can be 'always' (default if omitted),
                            'auto', or 'never'; more info below

              так что always это по умолчанию.

              Помотри файлы профиля (я не знаю как он у zsh называется, ну тот, что у bash ``profile``), там где-то
              Ответить
              • обычно .zshrc и ещё что-то более глобальное в /etc что сорсится в rc, профайла у зсш я не припомню
                Ответить
                • Commands are then read from $ZDOTDIR/.zshenv.  If the shell is a  login
                         shell,  commands  are  read from /etc/zprofile and then $ZDOTDIR/.zpro‐
                         file.  Then, if the  shell  is  interactive,  commands  are  read  from
                         /etc/zshrc  and then $ZDOTDIR/.zshrc.  Finally, if the shell is a login
                         shell, /etc/zlogin and $ZDOTDIR/.zlogin are read.
                  Ответить
              • куда смотреть-то понятно, надо выяснить, то что там насрано — оно чьё, зшевское или манджаровское
                Ответить
                • а твой манджаро на дебе?

                  можно переустановить zsh, попросив явно спросить тебя про все измененные конфиги, и тогда ты узнаешь, насрал ли ты, или по умолчанию так было
                  ``
                  apt-get --reinstall -o Dpkg::Options::="--force-confask" install zsh
                  ``
                  Ответить
                  • На арче он основан вроде, пакмен короче.
                    Ответить
                    • тогда вопросы к пакману видимо
                      Ответить
                      • Ну что-то мне намекает, что файлы с дефолтными переменными и алиасами мейнтейнеры дистриба наполняют, а не разрабы шеллов.
                        Ответить
                  • Маджаро на пакмане
                    Ответить
    • я не знаю, встроенный ли в ``ls`` у zsh или обычный, гнушный, из coreutils.
      покажи

      ``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
      Ответить
      • > type

        Откуда ты все эти команды знаешь?

        P.S. На убунте показало aliased to `ls --color=auto'.
        Ответить
        • А ты никогда не читал man [?
          Ответить
        • Он читал terminfo and termcap от орейли букс, чертяка
          Ответить
        • не помню уже, в какой-то книжечке вычитал.

          Про нее даже статья есть
          https://en.wikipedia.org/wiki/Type_(Unix)

          Интересно, что type есть в sh и bash, а в ksh нету.

          Зато везде есть ``command -V``, лол.
          Ответить
          • Я команды самого шелла практически не знаю. В основном только условные операторы да всякие bg/fg.
            Ответить
            • что, и expr? и set? и, извиняюсь, trap?

              всё это есть в 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
              Ответить
              • expr, set и trap юзал конечно. Но я по большей части гуглил нужные мне на практике команды, книги по шеллу никогда не доводилось читать.
                Ответить
                • В голове нужно иметь reverse index, иначе трудно будет узнать, что что-то вообще можно сделать.

                  Например, как догадаться о существовании опции ``-mount`` у ``find`` (она позволяет не пересекать границы файловых систем) или о sticky bit у каталога (он запрещает удалять чужие файлы даже если есть права на запись в каталог) или о том же process substituion, представляющем stdout команды как файл?

                  Пока сидишь на горшке -- читаешь маны или книжечки про всякое говно, оно и откладывается в голове
                  Ответить
      • Ты совершенно прав, в zsh по дефолту
        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 не цветной по умолчанию штоли?
          Ответить
          • Да, у меня в убунте на изкоробочном zsh точно так же, не цветное. А для баша был цветной алиас. Короче умолчания очень сильно зависят от дистриба, походу.
            Ответить
            • насколько помню, этот алиас всегда задавался в .bashrc/.bash_profile, так что тут может быть еще куча ада, связанного с /etc/skel
              Ответить
              • А вот нахрена, кстати, они всю эту кастомизацию добавляют в скелет, а не в глобальный профайл? Его же потом обновить невозможно, когда юзер уже создан.
                Ответить
                • Я вообще вспоминаю всю эту хуйню только когда у меня появляется необходимость оправдать свое желание кому-нибудь уебать.
                  Ответить
          • Вообще цвета в аутпуте есть, по крайней мере, у некоторых тулзов
            Ответить
            • зайди в папку с кучей файлов, и сделай

              ``ls --color``
              а потом просто ``ls``

              отличается?
              Ответить
              • Только лучше в папку с кучей других папок и файлов. А то в убунте, к примеру, обычные файлы дефолтным цветом подсвечены, по ним не видно работают ли цвета.
                Ответить
                • за связь типа файла с цветом отвечает $LS_COLORS вроде, там можно узнать какое рсширение как выводится
                  Ответить
                  • Ебать там переменная... я надеюсь есть какая-нибудь тула, которая может это расшифровать?
                    Ответить
                    • https://geoff.greer.fm/lscolors/
                      Ответить
                    • а еще есть вот такая пижня
                      https://linux.die.net/man/1/dircolors

                      в дебиане например в профайле он читает файлы из ``.dircolors``, можно раскрасить себе .php файлы коричневый цвет, например
                      Ответить
              • отличается)

                % ls --color
                ls: illegal option -- -
                Ответить
                • А --color=auto?
                  Ответить
                  • то же самое.

                    я думаю, это ls, патченный эпплом, как и всё остальное у них
                    Ответить
                    • Ага, а файлы подсвечиваются регуляркой, парсит сам эмулятор свой буфер /green
                      Ответить
                      • I don't care в любом случае, у меня основной шелл это xonsh, а там всё подсвечивается, как надо
                        Ответить
                    • Ну тут надо не забывать, что мак это бсд а не гну. А у бсд и гну тулы довольно сильно отличаются.
                      Ответить
                      • интересно проверить на чистой бзде
                        Ответить
                      • ну bash же они взяли из гну, я думал и core utils тоже

                        но если ls у них от freebsd, то вероятно -G
                        Ответить
                • -G попробуй

                  что у тебя за процентик? это не баш?
                  Ответить
                  • Говорили же про zsh весь тред, откуда баш?

                    С -G раскрасило, да.
                    Ответить
                    • понятно, заначит у apple дейстительно использует freebsdшные утилиты.
                      Ответить
                      • Ну это кстати частая подстава: ищешь про какую-нибудь команду, а у тебя в итоге с мартышками из интернетов ключи не совпадают

                        Вывод: некуй гуглить, надо читать маны
                        Ответить
                        • и тут я вспоминаю, что так и не почитал про ключи ps
                          Ответить
                          • ))ps вообще смешной. У BSD одни ключи. У SystemV другие.
                            А у линукса (точнее у гну) И те И другие, но не целиком
                            Ответить
                          • Раздавил твои яйца крутящейся дверью.
                            Ответить
              • Не нажимай на кнопки, если тебе не известно их назначение.
                Ответить

    Добавить комментарий