При первом запуске 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/
Чтобы выйти из этой ситуации, у вас есть несколько вариантов:
Запустите следующее (редактирование в соответствии с вашими требованиями:
export PATH=/usr/local/ActivePerl-5.26/bin:/usr/local/bin:/usr/bin:/bin
Вероятно, ваш путь по умолчанию установлен либо в ~/.bashrc
, либо в ~/.bash_profile
. Предположим, что он находится в ~/.bashrc
, тогда вы можете сбросить его вот так:
. ~/.bashrc
Это сокращение от:
source $HOME/.bashrc
Проще всего просто отказаться от текущего сеанса и начать заново. Закройте терминал и откройте новый; или перейдите в новую оболочку внутри текущего терминала, запустив/bin/bash
Apple еще не убилаcron
(), поэтому я думаю, что у вас есть как минимум два варианта:cron
и LaunchControl
.
Кратко:
cron
— это команда «старой -школы» -строки Unix. Он использует crontab
для определения расписания. Он бесплатный, с открытым -исходным кодом и широко используется. Его легко использовать -, если вы понимаете его ограничения.
Родные launchd
иlaunchctl
Apple имеют больше возможностей, чем cron
, но, судя по вашему вопросу, эти дополнительные возможности не нужны. Но если вы все еще заинтересованы, есть некоторые вещи, которые вы должны знать. Первое, что вы должны знать, этоLaunchControl
; вы использовали словолегкийв своем вопросе, и это почти исключает launchctl
. LaunchControl
— стороннее -коммерческое (платное )приложение, предоставляющее разумный механизм планирования с графическим интерфейсом для launchd
; это то, чтоlaunchctl
должно было быть.
cron
:Первый шаг будет зависеть от того, требуются ли праваroot
(администратора ). Поскольку вы не упомянули об этом, мы будем исходить из того, что привилегии пользователя — это все, что требуется вашему сценарию sh
:
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 счастливой. Необходимость этих шагов зависит от слишком многих факторов, чтобы их можно было здесь охватить. Если вы столкнулись с трудностями, оставляйте комментарии здесь, и мы ответим.