Запуск сценария оболочки bash на iMac при запуске

При первом запуске export PATH=/usr/local/ActivePerl-5.26/весь предыдущий путь был заменен этим единственным каталогом.

Последующие попытки «делать правильные вещи» теперь использовали новый путь, поэтому, когда вы запускали PATH=/usr/local/ActivePerl-5.26/bin:$PATH, это обновляло переменную PATH, чтобы она содержала следующую строку:

/usr/local/ActivePerl-5.26/bin:/usr/local/ActivePerl-5.26/

Чтобы выйти из этой ситуации, у вас есть несколько вариантов:

1. Явно укажите путь так, как вы хотите

Запустите следующее (редактирование в соответствии с вашими требованиями:

export PATH=/usr/local/ActivePerl-5.26/bin:/usr/local/bin:/usr/bin:/bin

2. Загрузите свой профиль bashrc или bash _для сброса среды

Вероятно, ваш путь по умолчанию установлен либо в ~/.bashrc, либо в ~/.bash_profile. Предположим, что он находится в ~/.bashrc, тогда вы можете сбросить его вот так:

. ~/.bashrc

Это сокращение от:

source $HOME/.bashrc

3.Начать новый сеанс оболочки

Проще всего просто отказаться от текущего сеанса и начать заново. Закройте терминал и откройте новый; или перейдите в новую оболочку внутри текущего терминала, запустив/bin/bash

2
06.02.2021, 23:07
1 ответ

Apple еще не убилаcron(), поэтому я думаю, что у вас есть как минимум два варианта:cronи LaunchControl.

Кратко:

  • cron— это команда «старой -школы» -строки Unix. Он использует crontabдля определения расписания. Он бесплатный, с открытым -исходным кодом и широко используется. Его легко использовать -, если вы понимаете его ограничения.

  • Родные launchdиlaunchctlApple имеют больше возможностей, чем cron, но, судя по вашему вопросу, эти дополнительные возможности не нужны. Но если вы все еще заинтересованы, есть некоторые вещи, которые вы должны знать. Первое, что вы должны знать, этоLaunchControl; вы использовали словолегкийв своем вопросе, и это почти исключает launchctl. LaunchControl— стороннее -коммерческое (платное )приложение, предоставляющее разумный механизм планирования с графическим интерфейсом для launchd; это то, чтоlaunchctlдолжно было быть.

Решение cron:

Первый шаг будет зависеть от того, требуются ли праваroot(администратора ). Поскольку вы не упомянули об этом, мы будем исходить из того, что привилегии пользователя — это все, что требуется вашему сценарию sh:

.
  1. Из приложения Terminalна iMac:
% crontab -e

Вы можете получить запрос на выбор редактора по умолчанию для вашего crontab. Если вы не уверены, что выбрать, выберите nanoв качестве редактора.

Ваш crontabоткроется в выбранном вами редакторе.

Добавьте следующую строку в конец вашего crontabфайла:

@reboot /bin/sleep 10; /var/tmp/test.sh >> /Users/<YOURUSERID>/test_sh_log.txt 2>&1 

Разбираем это:

  • @reboot :указывает cronвыполнить следующую команду (s )при загрузке системы

  • /bin/sleep 10приказывает cronзаснуть на 10 секунд перед выполнением следующей команды. В этом может не быть необходимости, но если вы используете сетевые службы или монтируете файловые системы,время sleepдаст системе время, чтобы запустить их до того, как ваш скрипт вызовет их.

  • /var/tmp/test.sh — это ваш скрипт с правильно установленными разрешениями на выполнение.

  • >> /Users/<YOURUSERID>/test_sh_log.txt 2>&1перенаправляет любые выходные данные в удобный файл журнала; 2>&1получает сообщения об ошибках stdoutиstderr(). Это часто полезно для устранения неполадок или если вы хотите, чтобы ваш сценарий оболочки выводил что-либо во время работы.

Как только вы rebootзапустите свой iMac, test.sh должен начать работать.

Наконец:

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

1
18.03.2021, 22:32

Теги

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