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

У меня есть две строки Python в моем сценарии удара, оба должны работать с флагом-c, но после того как я запускаю скрипт Bash, он говорит мне, что он не мог найти флаг-c, который необходим, чтобы Python выполнил команду в Bash. Это действительно работает от команды как то, если я копирую команду Python в командную строку, это выполняет команду, но не из сценария.

Вывод ошибок:

mount.sh: 40: mount.sh: -c: not found

Мой сценарий:

## define a function that launched the zenity username dialog
get_username(){
    zenity --entry --width=300 --title="Mount $MOUNTDIR" --text="Username:"
}
# define a function that launched the zenity password dialog
get_password(){
    zenity --entry --width=300 --title="Mount $MOUNTDIR" --text="Password:" --hide-text
}

# attempt to get the username and exit if cancel was pressed.
wUsername=$(get_username) || exit

# if the username is empty or matches only whitespace.
while [ "$(expr match "$wUsername" '.')" -lt "1" ]; do
    zenity --error --title="Error in username!" --text="Please check your username! Username field can not be empty!"  || exit
    wUsername=$(get_username) || exit
done

wPassword=$(get_password) || exit

while [ "$(expr match "$wPassword" '.')" -lt "1" ]; do
    zenity --error --title="Error in password!" --text="Please check your password! Password field can not be empty!" || exit
    wPassword=$(get_password) || exit
done

python -c 'import keyring; keyring.set_password("WinMount", wUsername, wPassword)'

Get_wPassword=python -c 'import keyring; keyring.get_password("WinMount", wUsername)'

# mount windows share to mountpoint
sudo mount -t cifs //$SERVER/$SHARE ${HOME}/${DIRNAME} -o username=${wUsername},password=$Get_wPassword,domain=${DOMAIN}
1
задан 21 May 2014 в 17: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
ответ дан 10 November 2019 в 18:02

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

Get_wPassword=python -c 'import keyring; keyring.get_password("WinMount", wUsername)'

-c интерпретируется как команда. Запишите его следующим образом:

Get_wPassword=$(python -c 'import keyring; keyring.get_password("WinMount", wUsername)')

РЕДАКТИРОВАНИЕ: Для проблемы с переменной удара. Можно использовать 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
ответ дан 10 November 2019 в 18:02

Строка

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
ответ дан 10 November 2019 в 18:02

Другие вопросы по тегам:

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