Если Вы делаете echo $PS1
от Вашей оболочки можно проверить, чтобы видеть, существует ли a \r
где угодно в строке. Раз так это - преступник.
Для устранения проблемы, можно добавить a \n
к началу Вашей подсказки.
Если Вам просто нужен кошке он к другой команде, можно сделать так без страха перед ним угоняемый. Для просмотра его в командной строке, можно также сделать cat file | less
Еще одна проблема прибывает по моему мнению где cat
по сравнению с. cp
имеет значительное значение:
По определению кошка развернет редкие файлы, заполняя разрывы с "реальными" нулевыми байтами, в то время как CP, по крайней мере, можно сказать сохранить дыры.
Редкие файлы являются файлами, где последовательности нулевых байтов были заменены метаданными для сохранения пространства. Можно протестировать путем создания один с dd и копировать его с инструментами по Вашему выбору.
Создайте редкий файл (изменяющийся на/tmp заранее, чтобы избежать, чтобы проблема - видела заключительное примечание):
15> cd /tmp
16> dd if=/dev/null of=sparsetest bs=512b seek=5
0+0 records in
0+0 records out
0 bytes (0 B) copied, 5.9256e-05 s, 0.0 kB/s
измерьте его - это не должно занимать место.
17> du -sh sparsetest
0 sparsetest
скопируйте его с CP и проверьте размер
18> cp sparsetest sparsecp
19> du -sh sparsecp
0 sparsecp
теперь скопируйте его с кошкой и проверьте размер
20> cat sparsetest > sparsecat
21> du -sh sparsecat
1.3M sparsecat
попробуйте свои предпочтительные инструменты для проверения их поведения
не забывайте мыться.
Заключительное предупреждение: Эксперименты как они имеют свойственный шанс повышения Вашей известности с Вашим локальным системным администратором при выполнении их в файловой системе, это - часть его плана резервного копирования, или очень важный для благополучия системы. В зависимости от его выбора инструмента для резервного копирования он мог бы закончить тем, что нуждался в большем ленточном носителе, чем он когда-нибудь считал возможным создать резервную копию того одного 0-байтового файла, который расширен до терабайт, обнуляет.
Другие файлы, которые не могут быть скопированы ни с кошкой, ни с CP, включали бы специальные для устройства файлы и т.д. Это зависит от Вашей реализации копирования инструмента, если бы это может копировать узел устройства, или если это весело скопировало бы свое содержание вместо этого.
Согласно комментарию Keith, cp
сохраняет некоторые полномочия, и cat
создает новый файл как umask
указывает. Так $2
разрешение не сохраняется это $4/vmlinuz
является довольно чистым, в то время как, если некоторое странное разрешение установлено на $3
, $4/System.map
сохранит это.
У обоих есть эквивалентная функциональность в тех двух случаях, но CP является просто операцией файла. "Возьмите этот файл и сделайте копию из него там".
кошка, с другой стороны, предназначается для разгрузки содержания файла к консоли. "Возьмите этот файл и отобразите его на экране" и затем сделайте, чтобы ниндзя напал на экран, и перенаправьте вывод в другом месте.
CP обычно было бы более эффективным, поскольку нет никакого перенаправления, идущего только, просто прямое копирование байтов от местоположения к местоположению B.
кошка была бы read bytes -> output to console -> intercept output -> redirect to new file
.
cat
не будет действительно output to console -> intercept output -> redirect to new file
, выходной файл для кошки может быть stdout или нормальным файлом, это просто произведет в файл, пока вход не является тем же, как произведено.
–
29.01.2012, 05:14
cat
не имеет никакого отношения к консоли. Оба cat
и cp
читайте из входного файла и запишите в выходной файл. С cat
, выходной файл открыт оболочкой, тогда как с cp
, выходной файл открыт cp
; это не делает разницы в производительности. cp
может быть быстрее, но по совершенно другой причине: некоторые реализации cp
попытайтесь предположить правильный размер блока для производительности в зависимости от входных и выходных устройств; реализация cat
не обеспокоился бы.
– Gilles 'SO- stop being evil'
30.01.2012, 01:48
Это - действительно вопрос предпочтения, по моему скромному мнению.
Нет технически никакой реальной разницы, если Вы не используете команду CP с переключателем-p для сохранения принадлежности файла / группа. Иначе это - то же самое функционально. Ответ Marc является намного более явно подробным хотя и точный.
cp
без -p
действительно сохраняет некоторые полномочия. Например, если исходный файл является исполняемым файлом, cp
сделает исполняемый файл конечного файла, но cat
не будет. положительная сторона
– Keith Thompson
29.01.2012, 04:35
vmlinuz
не будет исполняемый файл ли $2
.
–
29.01.2012, 04:38
Найден cat
здесь и там в некоторых файлах Makefile/скриптах, что заставило меня тратить время, так как cat
становится интерактивным, когда входной файл не задан. Можно также тратить реальные деньги на инструменты для сборки, если они застопорились на длительный период.
Для иллюстрации на примере OP:
Предположим, что $2
и $3
являются пустыми строками оболочки (по какой-то плохой причине :\):
cat $2 > $4/vmlinuz # waits forever
cp $3 $4/System.map # returns an error immediately
Теперь я склонен использовать cp
или install
вместо cat
, когда это возможно.
Интересные ответы и комментарии, спасибо!
cp
делает файл точно так же, как оригинал, в то время какcat
создает новый файл с тем же содержанием. – Qian 30.01.2012, 17:29