Заставить программу в конвейере думать, что у нее есть tty [duplicate]

Похоже, что у вас grep aliased to grep --color=always или что-то подобное. Вы можете проверить это, запустив type grep. Я могу воспроизвести подобное поведение:

$ var=$(ls -1 | grep --color=always "^rm")
$ echo ${var:0:1}
## Weird boxed character appears here

Чтобы лучше увидеть, что происходит, мы можем передать $var через od:

$ echo "$var" | od -c
0000000 033   [   0   1   ;   3   1   m 033   [   K   r   m 033   [   m
0000020 033   [   K   _   0   8   1   8   -   0   5   1   7   5   2   -
0000040   7   5   3   -   0   6  \n
0000047

The 033 [ 0 1 ; 3 1 m 033 [ K являются ANSI color escapes, и это то, что здесь ломается. Вы можете избежать этого, используя несглаженную версию grep:

/bin/grep '^rm_'

или

\grep '^rm_'

Еще лучше не разбирать ls, поскольку это часто приводит к другим проблемам. Более безопасный и простой способ сделать то, что вы хотите:

$ var="rm*"
$ echo $var
rm_0818-051752-753-06
$ echo ${var:0:1}
r

19
15.04.2016, 11:06
0 ответов

Теги

Похожие вопросы