У меня есть две строки Python в моем скрипте bash, обе должны работать с -c , но как только я запускаю сценарий Bash, он сообщает мне, что не может найти -c флаг, необходимый для того, чтобы python запускал команду в Bash. Он работает из команды, например, если я скопирую команду python в командную строку, она запустит команду, но не изнутри скрипта.
Выход ошибки :
крепление :40 :крепление :-с :не найдено
Мой скрипт :
##определить функцию, которая запускала диалог имени пользователя zenity получить _имя пользователя (){ zenity --запись --ширина = 300 --title="Mount $MOUNTDIR" --text="Имя пользователя :" } #определить функцию, которая запускала диалоговое окно пароля zenity. получить _пароль (){ zenity --запись --ширина = 300 --title="Mount $MOUNTDIR" --text="Пароль :" --скрыть -текст } #попытка получить имя пользователя и выйти, если была нажата отмена. wUsername=$ (получить _имя пользователя )|| выход #, если имя пользователя пустое или соответствует только пробелам. в то время как [ "$ (expr соответствует "$wUsername" '.' )" -lt "1" ]; делать zenity --error --title="Ошибка в имени пользователя!" --text="Пожалуйста, проверьте свое имя пользователя! Поле имени пользователя не может быть пустым!" || выход wUsername=$ (получить _имя пользователя )|| выход Выполнено wPassword=$ (получить _пароль )|| выход в то время как [ "$ (expr соответствует "$wPassword" '.' )" -lt "1" ]; делать zenity --error --title="Ошибка пароля!" --text="Пожалуйста, проверьте свой пароль! Поле пароля не может быть пустым!" || выход wPassword=$ (получить _пароль )|| выход Выполнено python -c 'импорт набора ключей; keyring.set _пароль ("WinMount", wUsername, wPassword )' Get _wPassword=python -c 'import keyring; keyring.get _пароль ("WinMount", wИмя пользователя )' #монтировать общий доступ Windows к точке монтирования sudo mount -t cifs //$SERVER/$SHARE ${HOME}/${DIRNAME} -o username=${wUsername},password=$Get _wPassword,domain=${DOMAIN}
Get_wPassword=python -c 'import keyring; keyring.get_password("WinMount", wUsername)'
наверное должно быть
Get_wPassword=$(python -c 'import keyring; keyring.get_password("WinMount", wUsername)')
и если вы хотите, чтобы wUsername
была задана переменной оболочки с тем же именем
Get_wPassword=$(python -c "import keyring; keyring.get_password('WinMount', '$wUsername')")
(обратите внимание, как двойные кавычки стали одинарными и наоборот )
Линия
Get_wPassword=python -c 'import keyring; keyring.get_password("WinMount", wUsername)'
означает "Выполнить -c
с параметром $Get _wPassword, установленным на python
"
Чтобы просто установить $Get_wPassword
на всю команду, используйте
Get_wPassword='python -c \'import keyring; keyring.get_password("WinMount", wUsername)\''
Это из-за этой строчки :
Get_wPassword=python -c 'import keyring; keyring.get_password("WinMount", wUsername)'
-c
интерпретируется как команда. Запишите это следующим образом :
Get_wPassword=$(python -c 'import keyring; keyring.get_password("WinMount", wUsername)')
РЕДАКТИРОВАТЬ :Для проблемы с переменной bash. Вы можете использовать os.getenv
для доступа к переменным окружения из Python :
export wUsername
export wPassword
Get_wPassword=$(python -c "import keyring; import os; \
keyring.get_password("WinMount", os.getenv('wUsername'))")
unset wPassword