2014-02-04 8 views
0

Здесь, в моем отделе, мы используем сервер акций samba как место для хранения сотрудников. Для сотрудников, использующих машины Apple, мы пытаемся использовать приложение AppleScript, которое будет получать имя пользователя и пароль пользователя, а затем использовать их для монтирования дисков. Проблема возникает, когда пользователь вводит пароль, содержащий escape-символы; например abcdefg/. Вот диалог код, который устанавливает переменные для пользователя и пароля:Ошибки Applescript при чтении пользовательского ввода (пароля), содержащего escape-символы

set user_name_dialog to display dialog "Enter your User ID: " default answer "" buttons {"Next"} default button "Next" 
set user_name to text returned of user_name_dialog 
--this line prompts the user for their password and sets the returned result as the variable "user_password" 
set user_password_dialog to display dialog "Enter your Password. " & return & return & "WARNING: If you are running Panther (MacOS 10.3), your input will be displayed in this box as clear text." default answer "" buttons {"Next"} default button "Next" with hidden answer 
set user_password to text returned of user_password_dialog 

А вот линия скрипт, который побежал для монтажа привода:

do shell script "mount -t smbfs //" & user_name & ":" & user_password & "@SOME IP ADDRESS/SOME FOLDER/ /SOME MOUNT POINT/" & user_name & "-SOME SHARE" 

Теперь я знаю, из небольшого исследования что это может быть что-то же просто, как дополнительная пара цитат где-то, я даже пытался

quoted form of 

не повезло бы то ни было. Сообщение об ошибке я получаю при вводе строки с экранирующего символа как таковой:

error "mount_smbfs: server connection failed: No route to host" number 68 

Любая помощь будет ЗНАЧИТЕЛЬНО оценили, как мой опыт работы с AppleScript очень ограничено.

+0

возможно дубликат [Монтирование диска SMB с помощью AppleScript] (http://stackoverflow.com/questions/19727128/mounting-an-smb-drive-via-applescript) –

ответ

0

ПРИМЕЧАНИЕ: следующее предположение. Я ничего не испытал.

Я не верю, что это проблема «escape-символов». Прямая косая черта не является символом побега. Обратная черта. Вероятно, проблема состоит в том, что команда smbfs интерпретирует прямую косую черту как разделитель для переменных пути, и это вызывает ошибку. Таким образом, вопрос становится ... как вы можете избежать конфликта между косой чертой и командой smbfs?

Я бы попытался выйти из косой черты при передаче команды в оболочку. Обратите внимание, что applescript также использует обратную косую черту в качестве escape-символа, поэтому для передачи escape-символа в оболочку вам нужно будет избежать escape-кода. Поэтому напишите пользовательский обработчик, чтобы передать свои пароли, чтобы выполнить этот процесс эвакуации.

Итак, если это ваш пароль, «abcdefg /», попробуйте передать его как «abcdefg \\ /» (обратите внимание на двойную обратную косую черту). Как уже упоминалось, вы можете написать пользовательский обработчик, чтобы проверить свой пароль на символ «/», а если он найден, вставьте «\\» перед ним. Но прежде чем писать этот обработчик, попробуйте предлагаемое решение вручную, чтобы узнать, разрешает ли он вашу проблему.

set pword to "/abc/defg/" 
escapeSlash(pword) 

on escapeSlash(x) 
    if x contains "/" then 
     set AppleScript's text item delimiters to "/" 
     set textItems to text items of x 
     set AppleScript's text item delimiters to "\\/" 
     set x to textItems as text 
     set AppleScript's text item delimiters to "" 
    end if 
    return x 
end escapeSlash 
+0

Да пытаясь, что не работало я wouod опубликуйте сообщение об ошибке, но сейчас я мобилен. Как лучше всего реализовать обработчик строк? Мое знание аппликации действительно ужасно. –

+0

Я добавил обработчик, используя разделители текстовых элементов AppleScript, чтобы выполнить эту работу. Они управляют разделителем, когда вы принуждаете строку к списку с «текстовыми элементами» и обратно с «как текст». Поэтому мы можем манипулировать ими, чтобы получить результат. – regulus6633

+0

После проверки вашего обработчика это ошибка, которую я получаю «Ошибка mount_smbfs: не удалось выполнить подключение к серверу: нет маршрута на номер 68». Я также получил это, когда вручную установил косые черты в \\ /. –

Смежные вопросы