Mac os как запустить sh скрипт

Обновлено: 06.07.2024

Я пытаюсь настроить несколько сочетаний клавиш, которые открывают определенные сеансы iTerm, которые я смог сделать с BetterTouchTool и немного магии AppleScript. Проблема в том, что OS X настаивает на открытии окна терминала для любого сценария оболочки, который вы выполняете через графический интерфейс (т. е. из Finder или в качестве сочетания клавиш из BetterTouchTool). Окно терминала не появляется, если я запускаю скрипт непосредственно из другого терминала.

временное решение я нашел, чтобы обернуть скрипт в .App directory, которая решает проблему избыточного окна терминала, но имеет некоторые другие проблемы (например, OS X, похоже, рассматривает каждое результирующее окно iTerm как отдельное приложение, загромождая мою док-станцию). (EDIT: это поведение было вызвано ошибкой в моем скрипте, см. ниже)

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

есть ли способ полностью отключить такое поведение? Я уже нашел настройку в настройках терминала, чтобы закрыть окно После завершения сценария, но все еще раздражает, что окно терминала появляется на секунду.

открыть Automator выберите приложение добавьте Выполнить Скрипт действие и введите команду кавычки (если у вас есть файл, вы можете просто перетащить его).

кроме воспроизведения, теперь вы можете сохранить (как приложение в любом месте) и даже установить значок.

вот небольшой обходной путь, в случае, если вы представляете себе пусковые установки приложений, как Alfred. Я использую его каждый день, и я купил Powerpack, что позволяет запускать молчит скриптов.

enter image description here

Они не откроют терминал при запуске и могут быть привязаны к любой последовательности ключевых слов. Они могут даже включать параметры и иметь дополнительные опции:


Сегодня я расскажу как увеличить эффективность работы в Mac OS X за счёт использования консоли.

Думаю, ни для кого не секрет, что Mac OS является Unix-based системой, но переработанной почти до неузнаваемости. Даже консоль засунули куда подальше — не сразу и найдёшь. И вся система нацелена на использование GUI, при дефолтных настройках даже переключение между кнопками по Tab не работает — без мыши никуда. И тем не менее, Мак — это не только окошки, не только док и лаунчер. Мак это ещё и вся мощь shell скриптов и консоли!

Если Вы пришли из мира M$, то для начала неплохо бы поучить общие команды shell'а, например, по вот этому учебному пособию. Как минимум, нужно усвоить команды перехода по каталогам и способы запуска программ и скриптов.

Если Вы пришли в мир Mac OS из мира Linux'а и FreeBSD, то, скорее всего, знаете как минимум основы shell-скриптинга. Но и для вас в статье может оказаться кое-что интересное, ведь в маке есть уникальные консольные команды, которые так же полезно знать.

Вот о некоторых особенностях маковской консоли далее и пойдёт речь.



Для начала избавимся от стандартного терминала. Ну, точнее, поставим другой — получше. Я лично предпочитаю iTerm2, который подходит для работы куда лучше системного. Хотя, и у него бывают интересные моменты (см. картинку вверху).

Далее нам могут понадобиться дополнительные инструменты, поэтому устанавливаем MacPorts (хотя, конечно, можно и другой менеджер пакетов). Теперь мы можем ставить нужные консольные утилиты с помощью простых команд. Например, ставим Midnight Commander (он в любом случае может пригодиться), набираем в iTerm2:


После ввода пароля и установки зависимостей и самого mc, можем его запустить, как вы уже догадались, командой mc .

О ужас! Нам понадобятся функциональные клавиши, а они нажимаются только через Fn+F15 , что же делать? Ну как что — лезть в системные настройки и выключать это. Иначе сложно будет с mc работать.

Ещё одно важное замечание: кури мануалы если что-то не понятно, набираем в консоли man команда — и получаем подробное описание команды. (Кстати, для выхода из просмотра мануала надо просто нажать Q).

Легко можно заметить, что mc показывает куда больше файлов и папок, чем Finder. Конечно, можно поставить хак для него, чтобы он отображал такие файлы, но не все это любят. Так что остаётся лишь пользоваться Cmd+Shift+G и вводить вручную имя папки. Но данный способ не особо удобен: нет автокомплита, нет возможности видеть скрытые файлы. Теперь вернёмся к терминалу. В Mac OS X есть замечательнейшая команда open , которая действует так, как будто пользователь сделал даблклик на файле или папке в Finder — открывает файл, бандл или ссылку в связанной программе, открывает папку в Finder'е. Вот простой пример работы с этой командой: заходим с помощью mc в скрытую папку (например, /etc/) и набираем:

Wuala! Файндер отобразил нам нашу системную папку! Но это ещё не всё, ведь скрытые файлы всё ещё не видны. Для примера, откроем наш .profile :


И — опа! — скрытый файл открылся в TextEdit! Всё предельно просто.

Пара слов о бандлах


Это всем известно, но на всякий случай повторю: обычные программы в Mac OS X на самом деле являются папками с расширением .app и особым образом устроенным содержимым. Убедиться в этом легко: открываем в Finder папку /Applications/ и делаем Ctrl+Click (либо Right-Click , если хотите) на любой программе и выбираем «Показать содержимое пакета».

Из консоли это так же очень хорошо видно: mc отображает эти программы именно как папки. И как же запустить из консоли GUI-программу, спросите вы? Очень просто, есть даже два способа.

Способ первый, простейший:


Программа будет запущена и консоль будет свободна для дальнейших действий.

Способ второй, интересный:


Программа будет запущена, но консоль не освобидится — она будет ждать завершения программы и выводить всё, что программа захочет вывести в неё. То есть, таким образом можно посмотреть рабочий лог некоторых программ.

Ещё одно очень важное различие между этими двумя методами: второй позволяет запустить два экземпляра программы, в то время как первый активирует уже запущенную, буде такая имеется. Так что через консоль можно решить и эту проблему (хотя, скорее фичу) макоси: через Finder, док и лаунчер запустить два экземпляра программы нельзя, а вот из консоли — пожалуйста, хоть двадцать два.

Расскажу вкратце что из себя представляет shell-скрипт. По сути — это обычный текстовый файл, содержащий серию команд для выполнения. Самый простой скрипт просто запускает последовательно все команды. Скрипты посложнее могут иметь условия, циклы и функции, то есть, скрипт может быть весьма большой и сложной программой. Основной плюс таких скриптов — на их службе вся мощь консольных утилит из мира unix, что с лихвой компенсирует бедность языковых конструкций. Приведу простой пример скрипта, который преобразует все файлы .jpg в текущей директории, уменьшив их размер до 200 пикселей в ширину или высоту.


Пример простейший, но он демонстрирует главное: в скриптах сокрыта великая сила.

В Mac OS X имеется несколько встроенных механизмов по автоматизации действий. Один из очень распространённых — AppleScript, для которого есть и графический редактор-запускатор. Но использовать такие скрипты можно и из консоли, для этого есть особая утилита — osascript . Использовать её можно так:

Не буду углубляться в AppleScript, он заслуживает отдельной статьи, и даже не одной. Так что рекомендую почитать справку или гугл по нему.

Главное: Вы можете комбинировать shell-скрипты со скриптами AppleScript, чтобы добиться максимальной гибкости в работе! К примеру, я использую такие вот смешанные скрипты для автоматической стилизации образа диска: сам диск создаётся с помощью shell (см. ниже), а фон и расположение элементов в образе задаётся с помощью AppleScript.

Есть ещё Automator, но он совсем уж GUI-шный, так что в данной статье его рассматривать бессмысленно. Он, конечно, полезный, но до мощи консоли не дотягивает.

Полный (ну, почти) список уникальных для макоси команд можно найти в одной хорошей статье (хотя сведения там немного устарели), я же вкратце расскажу о наиболее интересных.

Для работы с образами дисков имеется консольная утилита hdiutil . Пара примеров работы с ней:


Более подробно про возможности можно узнать из man hdiutil .

Если Вы — разработчик программ для макоси, то наверняка знаете о такой замечательной вещи, как Info.plist, да и вообще о plist'ах. Так вот, есть очень удобная утилита, позволяющая конвертировать .plist в .bplist, то есть, в более быстрый и лёгкий бинарный формат плиста.

Если хотите позаниматься ерундой, то можно из консоли проговорить любой текст. Для этого есть утилита say .


Так же можно задавать голос, которым мак будет с нами говорить:


Одна беда — по-умолчанию говорит эта штука только по-английски.

Теперь снимем скриншот командой из консоли.


Так же из консоли можно конвертировать текст между различными форматами. Например, можно переконвертировать .doc файл в HTML:


Так же textutil умеет преобразовывать кодировки.

Для изменения системных (и не только) настроек, можно использовать команду defaults . Используем её во благо! Включим наконец отображение скрытых файлов и папок в Finder!


Файндер автоматически перезапустится и теперь будет отображать скрытые файлы и папки! Но опять таки, это не всем нравится, так давайте это выключим, пока родителикто-нибудь не испугался или не удалил нужных файликов. Для сокрытия в уже указанной команде поставьте 0 вместо 1. Ну и для примера, ссылка на статью, где описано много твиков с помощью этой команды.

Ну что ж, мы разобрали некоторые интересные возможности консоли в Mac OS X. Статья, разумеется, не претендует на полноту и является, скорее, «заманухой» для вовлечения маководов в shell-скриптинг да и вообще в консоль.

Хотите улучшить этот вопрос? Обновите вопрос, чтобы он соответствовал теме переполнения стека.

Закрыто 7 лет назад .

Мне интересно, сможет ли кто-нибудь помочь мне с запуском файла .sh при входе в свою учетную запись на моем компьютере. Я использую Mac OS X 10.6.7.

У меня есть файл «Example.sh», который я хочу запустить при входе на компьютер. У меня нет проблем с его запуском, когда я уже вошел в систему, но я хочу, чтобы он запускался автоматически.

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

Это не по теме . Мне нужно было запустить мой демон Emacs;) Кстати, лучший ответ - ИМХО приложение Lingon X. Мне все равно, если это не по теме. Это лучший ответ, который я нашел в Интернете, и он заслуживает уважения. Я игнорировал это для других в первый раз, когда искал решение, и это было большой ошибкой!

Следить за этим:

  • Начало Automator.app
  • Выбрать Application
  • нажмите Show library на панели инструментов (если скрыто)
  • добавить Run shell script (из Actions/Utilities )
  • скопируйте и вставьте ваш скрипт в окно
  • Попробуй это

сохранить где-нибудь (например, вы можете сделать Applications папку в вашем доме, вы получите your_name.app )

перейти к System Preferences -> Accounts -> Login items

РЕДАКТИРОВАТЬ:

Недавно я получил значок «Хороший ответ» для этого ответа. Хотя моё решение простое и работает, самый простой способ запуска любой программы или сценария оболочки во время входа в систему описан в ответе @ trisweb , если только вы не хотите интерактивности .

приложение для входа в скриншот

С помощью автоматического решения вы можете делать следующее:

Итак, запрос на запуск сценария или выход из приложения, запрос пароля, запуск других рабочих процессов автоматизатора во время входа в систему, условный запуск приложений во время входа в систему и так далее .

@GregMiernicki LOL, доброе утро . ;) Почти год назад добавили РЕДАКТИРОВАТЬ к моему ответу, где это тоже сказано. Но это немного проще для обычных пользователей, потому что создание файлов XML (plist) не очень удобно для многих пользователей. В любом случае - спасибо за комментарий. ;) @GregMiernicki и не забывайте, что с помощью решения Automator вы можете создавать интерактивные сценарии входа в систему - например, сценарий, который попросит вас ввести некоторые данные (например, дополнительный пароль или что-то подобное). Мир не только черный или белый - по крайней мере, это как зебра . :) :) @Cupidvogel Запуск демона во время входа в систему - это именно то, что нужно для решения launchd - см. Ответ trisweb. Если вы можете управлять демоном python, вы наверняка сможете управлять конфигурационным файлом plist, в котором вы сможете управлять всеми аспектами перезапусков и т. Д. Слава за указание на другой ответ, как самый чистый. Это должно получить хороший значок гражданства :). Удивительный ответ. Выполните экспорт PATH = / usr / local / bin: $ PATH в начале скрипта, если вы хотите запускать такие команды, как «глобальное обновление composer» при запуске системы.

tl; dr: использовать встроенный в OSX модуль запуска и управления процессами launchd .

Для этого создайте launchctl демон. Вы будете иметь полный контроль над всеми аспектами сценария. Вы можете запустить один раз или остаться в живых как демон. В большинстве случаев это путь.

  1. Создайте .plist файл в соответствии с инструкциями в документации Apple Dev здесь или более подробно ниже.
  2. Установить в

Более того launchd , статья в Википедии довольно хороша и описывает систему и ее преимущества перед другими старыми системами.

Вот конкретный файл plist для запуска скрипта при входе в систему .

Обновлен 2017/09/25 для OSX El Capitan и новее (кредит Хосе Мессиасу-младшему ):

Замените <string> после ключа программы нужной вам командой (обратите внимание, что любой сценарий, на который ссылается эта команда, должен быть исполняемым: chmod a+x /path/to/executable/script.sh это должно быть сделано для всех пользователей).

Запустить launchctl load

Ключевым моментом является то, что это запись запуска для конкретного пользователя, поэтому она будет выполняться при входе в систему для данного пользователя. Системные демоны запуска (помещенные в /Library/LaunchDaemons ) запускаются при загрузке.

Если вы хотите, чтобы сценарий запускался при входе в систему для всех пользователей, я полагаю, что LoginHook - ваш единственный вариант, и, вероятно, именно поэтому он существует.

Открытие и завершение приложения «Терминал» на Mac

Каждое окно в Терминале представляет свой экземпляр процесса shell. Окно содержит приглашение, которое означает, что можно вводить команду. Отображаемое приглашение зависит от настроек Терминала и shell, однако обычно оно включает имя хоста, к которому Вы подключены, Вашу текущую рабочую папку, Ваше имя пользователя и символ приглашения. Например, если пользователь с именем michael использует по умолчанию оболочку zsh, приглашение выглядит следующим образом:

В приглашении указано, что пользователь с именем michael вошел в систему на компьютере с именем MacBook-Pro и текущей папкой является его папка пользователя, обозначаемая тильдой (

Открытие Терминала

На компьютере Mac выполните одно из следующих действий.


Нажмите значок Launchpad в панели Dock, введите «Терминал» в поле поиска и нажмите значок Терминала.


В окне Finder откройте папку «Программы/Утилиты» и дважды нажмите приложение «Терминал».

Завершение приложения «Терминал»


В приложении «Терминал» на Mac выберите пункт меню «Терминал» > «Завершить Терминал».

Завершение сеанса shell


В окне приложения «Терминал» на Mac, где запущен процесс shell, который Вы хотите завершить, введите exit и нажмите клавишу Return.

Это обеспечит закрытие всех текущих команд, выполняемых в shell. Если что-то продолжает выполняться, появляется диалоговое окно.

Если Вы хотите изменить поведение при выходе из shell, см. Изменение настроек shell для профилей.

Как запустить sh скрипт на Mac?

Откройте терминал, введите sh /path/to/file и нажмите Enter. Быстрее ввести sh и пробел, а затем перетащить файл в окно и выпустить значок в любом месте окна.

Как запустить файл sh?

Чтобы его запустить, надо зайти в каталог, где расположен скрипт, набрать название интерпретатора sh и первым параметров указать ваш файл hello.sh. Чтобы каждый раз не указывать интерпретатор в терминале, можно сделать скрипт исполняемым. Для этого необходимо: Указать интерпретатор внутри файла.

Как запустить скрипт sh на Windows?

1] Выполнить файл скрипта оболочки, используя WSL

  1. Откройте командную строку и перейдите в папку, где доступен файл скрипта
  2. Введите Bash script-filename.sh и нажмите клавишу Enter.
  3. Система выполнит скрипт, и в зависимости от файла вы должны увидеть вывод.

Как запустить скрипт на Windows?

Как открыть файл с расширением sh?

Чем открыть файл SH

  • В Windows: gVim, Notepad++, GNU Bash, Cygwin, Adobe ExtendScript.
  • В Mac OS: Apple Terminal, iTerm, MacVim, GNU Bash.
  • В Linux: GNU Bash, Vim.
  • Кроссплатформенное ПО: Sublime Text.

Как запустить скрипт на Python?

Python-код можно запустить одним из следующих способов:

  1. С помощью командной строки операционной системы (shell или терминал);
  2. С помощью конкретной версии Python или Anaconda;
  3. Использовать Crontab;
  4. Запустить код с помощью другого Python-скрипта;
  5. С помощью файлового менеджера;
  6. Использовать интерактивный режим Python;

Как запустить файл в bash?

Чтобы запустить скрипт Bash в вашей системе, вы должны использовать команду bash и указать имя скрипта, который вы хотите выполнить, с необязательными аргументами. Кроме того, вы можете использовать sh , если в вашем дистрибутиве установлена утилита sh . $ bash script This is the output from your script!

Как запустить скрипт VBS в Windows 10?

Как запустить bash в Windows 10?

Установка Bash в Windows 10 1607 и 1703

Зайдите в панель управления — Программы и компоненты — Включение или отключение компонентов Windows, отметьте пункт «Подсистема Windows для Linux». После установки компонентов, введите в поиске Windows 10 «bash», запустите предлагаемый вариант приложения и выполните установку.

Как установить Wsl?

Как запустить bash в Ubuntu?

Что такое скрипт?

Скрипты Скрипт (сценарий) — это последовательность действий, описанных с помощью скриптового языка программирования (JavaScript, PHP, Perl, Python и др.) для автоматического выполнения определенных задач. Например, для функционирования какого-нибудь сервиса, инструмента на сайте.

Как запустить скрипт Повершелл?

Для того чтобы запустить скрипт PowerShell необходимо сделать текстовый файл (txt), набрать в нем необходимые команды, после этого сменить расширение файла на PS1. Если возникли проблемы с изменением расширения файла- оно не отображается, рекомендую прочитать статью- Как сделать видимым расширение файлов.

Как запустить скрипт Windows 10?

Запуск файла сценария PowerShell

Как запустить скрипт Perl?

Если вы используете LinuxUnix, то скорее всего perl у вас уже установлен. Проверить это проще простого: зайдите в консоль и наберите в ней «perl»(+перевод строки, естественно). Если он уже установлен, то консоль будет ожидать дальнейший ввод — код вашего перл-скрипта.

Я всегда хотел иметь возможность запустить скрипт, который я скачал онлайн прямо из Finder, но двойной щелчок по файлу не работает.

Откройте терминал, введите sh /path/to/file и нажмите Enter.

Быстрее ввести sh и пробел, а затем перетащить файл в окно и выпустить значок в любом месте окна.

В качестве альтернативы, вы также можете сделать

/.bash_profile и добавьте следующую строку:

выполнить следующую командную строку:

тогда вы сможете запустить свой файл как программу

/bin/sh , в то время как в OSX скрипте должно быть .sh расширение и a alias для каждого из них. : -O

Выполните следующие шаги для запуска файлов сценария:

Щелкните правой кнопкой мыши на файле .sh.

Наведите курсор на Open With .

Выберите Другие . .

Вы должны быть в папке Приложения . Откройте папку Utilities и выберите Terminal.app.

Если вы не можете выбрать Terminal.app, измените включенные приложения с Рекомендуемые приложения на Все приложения . Это в нижней части окна.

Если вы хотите открыть каждый .sh файл с помощью Terminal.app, установите флажок Всегда открывать с помощью .

Причина, по которой он не работает после загрузки, заключается в том, что права доступа к файлам не позволяют это сделать. Чтобы включить разрешения на выполнение, откройте Терминал и введите chmod 755 /path/to/script . Вместо того, чтобы вводить полный путь, вы можете перетащить скрипт в окно терминала из Finder. Затем, чтобы выполнить, просто введите /path/to/script . Опять же, вы можете перетащить файл в окно терминала. Этот синтаксис должен выполнять скрипт, используя правильную оболочку, как определено в первой строке скрипта.

Читайте также: