Почему когда вводишь команду ls, в терминале выводится все одной строкой, а когда считываешь вывод из вима, добавляются переносы?
Вообще, в этих ваших шеллах очень все туманно в плане работы с управляющими символами. Там блин, под капотом мильены неявных преобразований каких-то, это все сильно усложняет. Как с этим всем говном разобраться? Где посмотреть простое объяснение всего для чотких пацанчиков, чтобы сильно не заморачиваться и во все это быстро въехать?
Кстати, да, идеально было бы как-то перехватывать аутпут любой программы, и смотреть на строку в ее «первозданном» виде, со всеми служебными символами. Я имею в виду как-то так ls | someprog --> foo\nbar\nbaz
. Такое возможно вообще? Помогите пожалуйста.
Я вот пытаюсь, например, смотреть через ls | cat -A
но выходит не совсем то что хотелось бы. Например, вместо символов перевода выводятся $. И при этом cat, по-ходу, еще добавляет свои переносы.
ls | cat -A | cat -A
bar$$
baz$$
foo$$
\n
????? Это возмутительно. Нахрен все это нужно? Почему нельзя увидеть просто «сырую» строку?И я вообще, что-то не врубаюсь в логику вывода. Допустим, ls сгенерировала строку foo\nbar\nbaz, и отправила в stdin. bash читает ее из stdout, но выводит ее при этом, бес перееносов. WTF? В принципе, можно предположить, что ls к выводу добавляет что-то еще, а на выходе bash фильтрует это что-то, так чтоли получается?