2013-04-22 164 views
2

我正在嘗試編寫一個運行mysqldump命令的bash腳本,該命令使用-p標誌。此標誌提示用戶輸入密碼,該密碼在直接在shell中運行時按預期工作,但在腳本中運行時不會顯示。在bash腳本中提示MySQLDump密碼?

#!/usr/bin/env 

ssh [email protected] 'mysqldump -u mysqluser -p --databases foo | bzip2' > ~/temp/foo-dump.sql.bz2 

現在我可以在腳本嵌入密碼或把它作爲一個參數,但我真的希望腳本提示輸入密碼的用戶,這樣的密碼不會在我的劇本回購或出現我的bash歷史。

任何人有任何想法如何做到這一點?

回答

1

這應該做的伎倆:

read -p "mysql password: " PASS && ssh [email protected] 'mysqldump -u mysqluser -p'$PASS' --databases foo | bzip2' > foo-dump.sql.bz2 ; PASS="" 

在這種情況下,你會先進入mysql的密碼,然後會提示您輸入SSH密碼。請注意,mysql密碼不會被隱藏,也就是說,某人可以在肩上閱讀它。如果你想避免這種情況,使用標誌-s

read -s -p "mysql password: " PASS && ... 

注意還存在一定不能是「P」(在-p密碼)和密碼變量引號之間的任何空間。

此外,你的shebang沒有指定使用哪個解釋器,這可能是一個問題。我建議你使用#!/bin/bash#!/usr/bin/env bash

+0

嗯,沒有工作。我可以在運行腳本後輸入文本,但它不是一個明確的提示,並且腳本不會處理到實際轉儲。 – 2013-04-25 17:13:03

+0

我已經添加了mysql密碼的顯式提示。你爲什麼說「腳本不處理實際轉儲」?發生什麼事?它給你一個空的文件?它會拋出一個錯誤? – msb 2013-04-25 21:43:09

+0

沒有文件,沒有明確的錯誤,它只是不進行 – 2013-04-25 21:48:28