Обучение из среды программирования Unix

if [ -d "$d" ]; then
   (recursiveprint "$d")
fi

Круглые скобки вокруг строки (recursiveprint "$d") запускают функцию в подоболочке. При запуске подоболочки значение FILES_COUNT клонируется, и изменения, сделанные в рекурсивном вызове внутри подоболочки, не вступают в силу в окружающей среде.

Без подоболочки это должно работать лучше, но тогда вам нужно вручную вернуться в родительский каталог при возврате из экземпляра функции. cd .. подойдет для вызовов, сделанных внутри функции, но давайте воспользуемся переменной, чтобы мы могли вернуться в исходный рабочий каталог, даже если он задан как абсолютный путь.

recursiveprint() {
    local oldpwd=$PWD
    cd "$1"
    ...
        if [ -d "$d" ]; then
           recursiveprint "$d"          # no parenthesis here
        fi
    ...
    cd "$oldpwd"
}

Также обратите внимание, что * не соответствует именам файлов, начинающимся с точки по умолчанию, используйте shopt -s dotglob, если хотите.

0
24.04.2017, 01:23
2 ответа
  1. В 1984 году еще не было Интернета с массовым доступом, поэтому единственным справочным источником была бы книга. Я подозреваю, что в наши дни вы прекрасно справитесь с подключением к Интернету.

  2. Cygwin, Bash на Windows, виртуальная машина Linux/FreeBSD, дешевый VPS. Есть много вариантов. Невозможно дать однозначный ответ, потому что вы не указали никаких критериев для лучшего варианта.

2
28.01.2020, 02:15

Руководство программиста Unix - это то, что более известно как коллекция man-страниц.

Если вы читаете Unix Programming Environment, то вам будет полезно ознакомиться со 2-м изданием, на которое ссылается эта книга. Вы можете найти копии в Интернете, например, от Bell Labs. Однако также будет полезно посмотреть руководство на вашей системе. Вы можете просмотреть отдельные записи руководства с помощью команды man (поэтому они и называются "man-страницы").

Обратите внимание, что это очень старая книга, а 2-е издание еще старше. За 35-45 лет Unix значительно изменился. Для изучения Unix было бы гораздо полезнее и гораздо проще изучить систему, которую вы можете запустить, например, современную версию Linux. Изучите ее в первую очередь, а исторические книги читайте после того, как познакомитесь с основами.

Лучший способ изучить Linux - это установить его на свою машину. Начните с установки в виртуальной машине. Для этого очень легко использовать VirtualBox. Выберите дистрибутив для начинающих пользователей, например, Ubuntu, Linux Mint или элементарную ОС. Вы можете запускать все те же программы на любом дистрибутиве, но некоторые дистрибутивы сложнее настроить, чем другие, если вы никогда не делали этого раньше.

4
28.01.2020, 02:15

Теги

Похожие вопросы