2013-12-12 3 views
0

У меня есть файл с именем this.txt, который имеет это содержание:Странно дифф поведение

a 
b 
c 
d 

Что я произвожу с помощью: ls /home > this.txt

Затем я создаю файл с именем that.txt, который имеет это содержание:

a 
c 
d 
f 

которые я генерирую с использованием: ssh -p 1111 [email protected] 'ls /home' > that.txt

Когда я сравниваю оба с использованием diff this.txt that.txt, я получаю нормальные результаты.

Тогда я получаю файл that2.txt используя expect сценарий, чтобы не вводить пароль для подключения SSH, с этим содержанием

a 
c 
d 
f 

Использование cat сравниваю (визуально) как файлы, и то же самое, но когда Я использую diff this.txt that.txt Я получаю результаты без смысла (он говорит, что ничего от this.txt в that2.txt).

Также, если я использую diff that.txt that2.txt, я получаю результат отсутствия смысла.

Возможно, это потому, что я использую два разных интерпретатора (потому что я использую expect и bash), а файлы кодируются по-разному? Есть идеи?

PD: Надеюсь, я объяснил сам. Я не англоговорящий, и это мой первый вопрос.

+1

Можете ли вы сделать 'cat -vte that2.txt' и показать его вывод. – anubhava

+0

Добро пожаловать в SO. Я несколько «нормализовал» вашу разметку, может быть хорошей идеей, если вы просмотрите мои изменения для будущей ссылки - просто потому, что однородность упрощает чтение. –

+0

Спасибо @ChristopherCreutzig за форматирование. Я сделаю это в следующий раз. Я люблю сообщество тисов! –

ответ

1

Предполагаю, что у вас есть файлы с пробелами на концах строк или с разными маркерами конца строки, возможно, обоими. Пожалуйста, сравните выходы od -c that.txt и od -c that2.txt. Кроме того, возможно, стоит проверить размеры файлов.

О, и я должен добавить, что вам не нужно вводить пароль в сценарий expect. ssh может работать с парами открытых ключей, намного безопасней альтернативой, и не очень сложно настроить. Проверьте man ssh-keygen для начала.

+0

Терминаторы линии CRLF, может быть? – Guido

+1

Моя мысль точно. –

+0

Спасибо! Эта команда 'od' сделала трюк. С этим я понял, что каждая строка в этом.txt заканчивается \ n, в то время как каждая строка в этом2.txt заканчивается \ r \ n. Так что я использовал 'tr -d '\ r'> that2.txt', а теперь' diff this.txt that.txt' и 'diff this.txt that2.txt' показывает те же результаты. –

Смежные вопросы