Вообще,
$ utility <input >output
приведет к выполнению utility
с его стандартным входным потоком , подключенным к файлу input
, и его стандартным выходным потоком , подключенным к файлу output
.
$
в начале строки — это приглашение оболочки (вы не будете вводить это ).
В случае sh
, который является интерпретатором команд оболочки, это заставит sh
читать и выполнять команды оболочки из входного файла(foo
в вашем случае )и записывать любые выходные данные в выходной файл(bar
в вашем случае ).Диагностические сообщения (ошибки и предупреждения )все равно будут отображаться на терминале, так как они обычно записываются в стандартный поток ошибок , который упомянутая вами командная строка никуда конкретно не перенаправляет.
Упомянутая вами команда имеет более или менее тот же эффект, что и
$ sh foo >bar
, так как sh
может читать из файла, указанного в командной строке, и будет читать из стандартного потока ввода, только если файл не указан.
Если он был установлен вручную, удалить его вручную не составит труда.
В будущем рекомендуется поместить вручную -установленные (, т.е. не управляемые менеджером пакетов )двоичные файлы в подкаталоге /opt
; для небольших программ можно даже создать /opt/bin
и поместить их туда. Это во избежание путаницы.