Рубрики
Uncategorized

MacOS против Linux — Команда CP откроет вас!

Строив www.firecode.io, я недавно столкнулся с более чем сотней провальных модульных тестов … Tagged с Linux, Bash, DevOps, Docker.

Во время строительства www.firecode.io Недавно я столкнулся с более чем сотней провальных модульных тестов при запуске тестового набора локально на моей машине MacOS, а не в контейнере Linux Docker. Платформа настроена для запуска тестов.

Я использую MacBook Pro для разработки программного обеспечения, в первую очередь потому, что MacOS на основе BSD обеспечивает опыт разработки, который очень похож на другие дистрибуты Linux. Все мои наиболее часто используемые навигационные команды — CD , сн , MV , Мкдир , прикосновение и т. Д. Работайте с паритетом 1: 1 по обоим ароматам операционных систем, или, по крайней мере, это то, что я думал. Как я обнаружил, потратив хороший час отладки этих неудач, существует тонкая разница между реализациями BSD и GNU cp -r Команда, которую я получил при запуске моих тестов в разных средах.

Вот разница, проиллюстрированная с примером, проведенным как в MacOS, так и в Linux:

# Creates "source_directory" in the current working directory
$ mkdir source_directory

# Creates 2 new empty files within "source_directory"
$ touch source_directory/{file1,file2}

# Creates "destination_directory" in the current working directory
$ mkdir destination_directory

# Intended to copy the contents of "source_directory" to "destination_directory", hence the trailing slashes
$ cp -R source_directory/ destination_directory/

# Lists the contents of "destination_directory"
$ ls destination_directory

Итак, что бы вы ожидали напечатать с лауреат ? Оказывается реализация Linux GNU CP копирует Source_directory каталог в destination_directory , в то время как на BSD macOS содержимое распаковано и копируется, так как я ожидал, что оно будет вести себя в обеих средах:

GNU (Linux):

$ ls destination_directory
source_directory

BSD (macOS):

$ ls destination_directory
file1 file2

Тропинг -черта является значимой в BSD, тогда как реализация GNU относится к обоим source_directory/ и Source_directory то же. Обходной путь, к счастью, действительно прост — добавить период, когда вы собираетесь скопировать содержимое, и вы увидите одно и то же поведение как на BSD, так и на GNU: CP -R Source_directory/. destination_directory/.

Я надеюсь, что этот Tidbit поможет вам написать лучший код кросс -среды на MacOS и поможет вам сэкономить время отладки неожиданными результатами.

Оригинал: «https://dev.to/ackshaey/macos-vs-linux-the-cp-command-will-trip-you-up-2p00»