Команда tr вызывает проблемы в оболочке cygwin bash.exe, но работает в mintty.exe

Я использую Windows с Cygwin. Следующая команда должна вывести количество вхождений символа «/» в строку «./bootstrp3.cab». Он работает, когда я использую оболочку mintty.exe и выводит «1»:

echo ./bootstrp3.cab | tr -cd / | wc -c

К сожалению, он выводит следующее сообщение с оболочкой bash.exe

Usage:
tr [-cs] string1 string2
tr -s[-c] string1
tr -d[-c] string1
tr -ds[-c] string1 string2

Кажется, что две оболочки ведут себя по-разному, но обе они кажутся оболочками одного типа, потому что, когда я echo $0, bash.exe выводит bash, а mintty.exe выводит -bash.

Я также попробовал эту команду с оболочкой bourne (sh.exe), но она выводит то же сообщение, что и с оболочкой bash.exe.

Кто-нибудь знает, как заставить команду работать с оболочкой sh.exe или bash.exe? И кто-нибудь знает, почему две оболочки bash ведут себя по-разному?


person Marc    schedule 25.07.2012    source источник
comment
Обычно я бы сказал, что это не проблема bash, поскольку tr — это отдельная программа. Однако я не знаю, как реализованы различные оболочки Windows/cygwin; различные утилиты Unix могут быть встроенными. Один из советов — посмотреть, работает ли tr -c -d (укажите каждый вариант отдельно) в обоих случаях.   -  person chepner    schedule 25.07.2012
comment
К сожалению, это не работает, разделяя параметры. Выдает такое же сообщение. Но спасибо за попытку помочь. Я уже мог обойти проблему, используя предложение perreals.   -  person Marc    schedule 26.07.2012
comment
MinTTY — это терминал, а не оболочка; вы используете оболочку в терминале и требуете обоих. Как вы начинаете каждый?   -  person me_and    schedule 26.07.2012
comment
Кроме того, каков результат запуска type tr в каждом?   -  person me_and    schedule 26.07.2012


Ответы (1)


Вы можете сделать то же самое, используя sed и wc:

echo -n ./bootstrp3.cab | sed 's![^/]!!g' | wc -c
person perreal    schedule 25.07.2012