У меня есть текстовый файл (test.txt), содержимое которого являются:Невозможно выполнить команду с Eval
mplayer -fs video.avi -vf mirror
Если я выполняю:
eval "$(cat test.txt)"
я получаю:
doesn't exist.or
Error parsing option on the command line: -vf
MPlayer 1.1-4.8 (C) 2000-2012 MPlayer Team
Но если я выполню:
mplayer -fs video.avi -vf mirror
видео будет воспроизводиться.
Почему eval
(или mplayer
?) Сбой в этом случае?
Я побежал:
$ file test.txt
test.txt: ASCII text, with CRLF line terminators
Текстовый файл, кажется, создан под Windows. Я скопировал его содержимое и создал новый файл под Linux. Теперь это работает.
Но как заставить его работать с исходным файлом Windows? Нужно ли мне заменять некоторые символы?
Почему вы используете 'eval'? действительно ли вам нужно выполнить содержимое в текущей оболочке? в этом случае _source_ it с '. test.txt', выполните его с помощью 'bash test.txt'. –
Мне не ясно, в каком сценарии 'eval' может быть лучше, чем просто' bash test.txt' или '. test.txt'. Не могли бы вы подробнее рассказать? – Dario
Для того, чтобы заставить его работать с концами строк, см. [Здесь] (http://stackoverflow.com/questions/16768776/convert-line-endings), вы должны удалить возвращаемые символы '\ r' –