Команда Python в bash не находит -флаг c

У меня есть две строки 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} 
1
05.21.2014, 16:44
3 ответа
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')")

(обратите внимание, как двойные кавычки стали одинарными и наоборот )

4
12.03.2019, 05:20
  • 1
    Это работает, спасибо :)Но как я могу заставить python брать wUsername из bash, потому что он говорит, что в данный момент он не определен, но я пишу его в zenity, и я хочу, чтобы он брал его из строки zenity после его вставлен. –  cr0c 05.21.2014, 13:00
  • 2
    Смотрите мою правку.... –  fkraiem 05.21.2014, 13:23
  • 3
    Я попробовал, как вы отредактировали. Это не работает. Он говорит, что он не определен. См. сообщение о хаосе для правильного ответа. –  cr0c 05.21.2014, 13:24
  • 4
    Ах, извините, вам, конечно, тоже нужно заключить в кавычки `$wUsername `. Использование `os.getenv `для этого является излишним, но что бы там ни было... –  fkraiem 05.21.2014, 13:28
  • 5
    Ваше решение тоже работает. Поскольку у вас меньше репутации, я сделал ваш ответ –  cr0c 05.21.2014, 13:30

Линия

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)\''
2
12.03.2019, 05:20

Это из-за этой строчки :

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
4
12.03.2019, 05:20
  • 1
    +1 для os.getenv, это будет работать, даже если в «wUsername» есть кавычки. –  daboross 05.21.2014, 19:52

Теги

Похожие вопросы