На момент написания статьи ссылка для скачивания скрытых файлов widget нарушается. @О. Р. маппер они теряют деньги по сравнению с вами, покупая более дорогой билет (если билет в одну сторону дешевле, они, вероятно, не делай этого; я только говорю, что это *возможно*, это не всегда бывает) Да, я не вижу, как платежей в физических магазинах с Bitcoin жизнеспособна на данный момент. Тот факт, что функция по-прежнему является частью базовых библиотек не означает, что она является частью какого-либо конкретного приложения. Как бы то ни было приложений эволюционировали, их авторы *удалены обесценился код*, что означает, эти приложения не содержат каких-либо ссылок на амортизированных объектов в библиотеке. Т. е., по *ушел* я имею в виду приложение, а не библиотека. Но это все равно необратимо ушли в прошлое, если вы хотите раскошелиться и поставить код обратно себе. Если вы называете (маленький, пожалуйста) пример приложения с номером версии, я могу попробовать проверить этот тезис для вас.

Зачем использовать автоматизаторы, когда вы можете остановиться в bash?

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

Идея в том, чтобы разделить ваш скрипт в 3 различных сценариев:


1: запустить службу FTP на выбранный сетевой интерфейс только
#!/бин/Баш
 #запускать FTP-сервиса
#судо="/usr/Бен/судо"
#помощью следущей="/бин/помощью следущей"
говорят="/usr/Бен/сказать"
networksetup="выполнить/sbin/networksetup"
хвост="/usr/Бен/хвост"
руководитель="/usr/Бен/руководитель"
вырезать="/usr/Бен/вырезать"
завиток="/usr/Бен/завиток"
 currentInterface=$(networksetup -listnetworkserviceorder |хвост +2 |глава -Н1 |вырезать -С5-12)
 getExternaladdress=$(завиток ipecho.net/plain)
 SiriSays="сказать -в Саманта"
 #судо -с помощью следущей нагрузки -Вт /система/библиотеки/LaunchDaemons/фтп.файл plist 
 #ваша команда начнет FTP на всех сетевых интерфейсах
 если [ "$currentInterface" = "аэропорт" ]; 
тогда
 networksetup -setpassiveftp аэропорт
еще
 networksetup --setpassiveftp Ethernet на
интернет
 $SiriSays "служба FTP был инициирован для"
 Эхо $currentInterface |$SiriSays; $SiriSays "интерфейс"
 $SiriSays "ваш внешний IP-адрес"
 Эхо $getExternaladdress | $SiriSays
выход

2: остановить службу FTP
#!/бин/Баш
 #остановить службу FTP
#судо="/usr/Бен/судо"
#помощью следущей="/бин/помощью следущей"
networksetup="выполнить/sbin/networksetup"
говорят="/usr/Бен/сказать"
хвост="/usr/Бен/хвост"
руководитель="/usr/Бен/руководитель"
вырезать="/usr/Бен/вырезать"
 currentInterface=$(networksetup -listnetworkserviceorder |хвост +2 |глава -Н1 |вырезать -С5-12)
 SiriSays="сказать -в Саманта"
 #судо -с помощью следущей разгрузки -з /система/библиотеки/LaunchDaemons/фтп.файл plist
 #ваша команда требует судо
 если [ "$currentInterface" = "аэропорт" ]; 
тогда
 networksetup -setpassiveftp от аэропорта
еще
 networksetup -setpassiveftp локальных сетей от
интернет
 $SiriSays "служба FTP был прекращен"
выход

3. проверьте состояние службы FTP
#!/бин/Баш
 #проверить статус службы FTP 
networksetup="выполнить/sbin/networksetup"
говорят="/usr/Бен/сказать"
хвост="/usr/Бен/хвост"
руководитель="/usr/Бен/руководитель"
вырезать="/usr/Бен/вырезать"
 currentInterface=$(networksetup -listnetworkserviceorder |хвост +2 |глава -Н1 |вырезать -С5-12)
 SiriSays="сказать -в Саманта"
 если [ "$currentInterface" = "аэропорт" ]; 
тогда
 networksetup -getpassiveftp аэропорт |$SiriSays
еще
 networksetup -getpassiveftp сети Ethernet |$SiriSays
интернет
выход

Затем применить appify сценарий для них

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