Вам нужна строка shebang, если исполняемый файл не может быть запущен ядром. Ядро может запускать машинный код только в определенном формате(ELF в большинстве вариантов Unix )или иногда в других форматах (, например. в Linux вы можете зарегистрировать исполняемые форматы через binfmt _misc). Если исполняемый файл нуждается в интерпретаторе , то ядро должно знать, какой интерпретатор вызывать. Вот для чего нужна строка shebang .
Если ваш скрипт использует синтаксис fish, его первая строка должна быть
#!/usr/bin/env fish
(Вместо этого вы можете использовать абсолютный путь, но тогда вам придется изменить скрипт, если вы хотите запустить его на машине, где исполняемый файл fish
находится в другом месте, например. /usr/bin/fish
против /usr/local/bin/fish
.)
Если ваш скрипт использует синтаксис sh, используйте
#!/bin/sh
(Все современные системы Unix имеют POSIX sh по адресу /bin/sh
, поэтому вам не нужно env
.)
Если ваш сценарий имеет синтаксис bash (, который представляет собой sh плюс некоторые расширения bash -), используйте
#!/usr/bin/env bash
В Linux на практике #!/bin/bash
также будет работать.
Все это не зависит от того, из какой оболочки вы вызываете скрипт. Важно только то, на каком языке написан сценарий.
Другой способ сделать это — запустить rsync --dry-run
. Это проверит оба дерева и выведет различия.
rsync --dry-run --checksum source destination
или вы можете положиться на быстрый метод rsync
(мод -время и размер ).
rsync --dry-run source destination
или решить, какую контрольную сумму использовать среди доступных методов, с помощью --checksum-choice
. Кроме того, если вам нужна дополнительная информация о различиях, вы можете добавить --itemize
.
Обратите внимание, что подсчет полной контрольной суммы для каждого файла неизбежно будет медленным, так как вам придется читать их целиком.
Используйте hardlink -vn
. См. http://manpages.ubuntu.com/manpages/bionic/man1/hardlink.1.html
. hardlink
проверяет идентичные файлы и связывает их, но использование -nv
просто перечисляет идентичные файлы.