Я використав команду.
/usr/bin/osascript -e 'do shell script "echo hello args 2>&1 etc" with administrator privileges'
Вона запитує пароль, кажучи, що osascript хоче внести зміни. Я хочу, як я зміню слово . \ t ?
Я використав команду.
/usr/bin/osascript -e 'do shell script "echo hello args 2>&1 etc" with administrator privileges'
Вона запитує пароль, кажучи, що osascript хоче внести зміни. Я хочу, як я зміню слово . \ t ?
Відповіді:
Я знайшов набагато кращий спосіб зробити це, копаючись через документ Applescript на сайті розробника Apple. Я знайшов цю ноту для випуску Яблука в MacOS 10.10
Він говорить:
do shell script can now specify a custom prompt to use in the password dialog. [15194980]
Проте, це нехтує сказати як Ви можете це зробити. Після деяких здогадок, я зрозумів, що є prompt
пункт, який дозволяє замінити osascript wants to make changes...
з тим, що ви хочете при використанні do shell script...with administrator privileges
у скрипті, викликаному osascript
. Наприклад:
osascript -e 'do shell script "ls -l" with prompt "The Great And Powerful OZ " with administrator privileges'
генерує діалогове вікно, яке виглядає так:
Я сподіваюся, що це допоможе комусь.
Всі вищезазначені методи потребують прав адміністратора, але якщо ви намагаєтеся це зробити як частина сценарію bash, який потрібно розповсюджувати, не вимагаючи адміністративних привілеїв або додаткових налаштувань, ви можете зробити щось подібне:
TMP=$(mktemp -d)
pushd "$TMP" > /dev/null 2>&1
/usr/bin/osacompile -e 'do shell script "echo hello args 2>&1 etc" with administrator privileges' -o 'My Cool Name.app'
'My Cool Name.app/Contents/MacOS/applet'
popd
rm -rf "$TMP"
Це створить тимчасовий каталог, скомпілює скрипт як аплет, виконає його, а потім видалить тимчасовий каталог і аплет.
Припускаючи, що El Capitan або Sierra встановлено, спочатку відключіть SIP і знову завантажиться до основної системи.
Відкрийте термінал і введіть:
sudo ln /usr/bin/osascript /usr/bin/butterfly
Увімкніть SIP знову.
Тепер метелик попросить внести зміни після введення
/usr/bin/butterfly -e 'do shell script "echo hello args 2>&1 etc" with administrator privileges'
Замість метелик можна використовувати майже будь-яке інше ім'я. Ім'я не повинно бути назвою виконуваного файлу, що вже існує на вашому Mac (особливо це не повинен бути вже існуючим у вашій PATH).
Тому ls або diskutil це великий NoNo але necyria_bellona нормально.
Це не працює для томів APFS (High Sierra та пізніших версій), оскільки жорсткі посилання не існують у цій файловій системі.
sudo
або вимкнення SIP. Потім використовуйте шлях жорстких посилань.
cat /System/Library/Sandbox/rootless.conf
). У High Sierra навіть деякі дискові блоки здаються захищеними (наприклад, block0 = MBR / pMBR). ls -lO /usr/bin/ | grep restricted
.