2015-04-17 2 views
1

Я знаю, что это можно делать такие вещи, какОценивать Баш/ЗШ выражения рядный

echo `ls` "foobar" 
echo $(ls) "foobar" 

, но когда я пытаюсь сделать что-то вроде

diff `pip freeze` requirements.txt 
diff $(pip freeze) requirements.txt 

он терпит неудачу.

Что мне здесь не хватает? Благодаря!

P.S Я использую оболочку zsh.

ответ

6

Команда diff ожидает имена файлов в качестве аргументов, а не строк. Что-то вроде:

diff file1 file2 

но не:

diff "$string1" "$string2" 

Если вы хотите дифф выход двух команд (или в случае выхода команды против статического файла), вы можете использовать process substitution:

diff <(pip freeze) requirements.txt 

<() будет перенаправить вывод pip freeze в файл на /dev/fd[0-9]. Затем это имя будет передано в diff.

+0

я не смог получить, что работает в моем 'zsh' установки, но это работало хорошо в' bash'. Благодарю. – nunos

+0

Я пробовал 'diff <(echo foo) <(эхо-бар)' в 'zsh', и он сработал. Какую версию 'zsh' вы используете? – hek2mgl

+0

Я использую версию '5.0.7'. Я получаю эту ошибку 'error:/dev/fd/11: неподдерживаемый тип файла фатальный: can not hash/dev/fd/11'. – nunos

0

Попробуйте

diff =(pip freeze) requirements.txt 
Смежные вопросы