[英]bash - escape variable SSH command without altering it
我正在使用文件內容作為參數的bash腳本中運行命令。 這里是一個簡化的例子:
USER=$(<$fileA)
PASSWORD=$(<$fileB)
wget -u $USER -p $PASSWORD
但是,用戶可以將文件的內容設置為任何值。 我以為我需要逃避這個問題,但是我不知道該怎么做,尤其是在不會更改$ PASSWORD的情況下。 否則,密碼顯然將不起作用。
謝謝
您可能只需要在變量周圍添加引號即可。
wget -u "$USER" -p "$PASSWORD"
如果您碰巧在變量末尾捕獲換行符,則可能要使用以下命令刪除它:
wget -u "${USER%$'\n'}" -p "${PASSWORD%$'\n'}"
${var}
語法與$var
等效,但是花括號允許使用bash操作變量。 通過在結尾花括號前添加%$'\\n'
, %
表示刪除文本$'\\n'
,這意味着刪除尾隨的換行符(如果有)。
在最壞的情況下,您可能會得到換行符和回車符(可能是文件是由Windows中的文本編輯器生成的),但是您也可以處理它:
wget -u "${USER%%[$'\n'$'\r']*}" -p "${PASSWORD%%[$'\n'$'\r']*}"
這次,搜索到的文本為[$'\\n'$'\\r']*
,表示“第一個換行符( \\n
或回車符( \\r
)及其后的所有內容”, %%
運算符表示“刪除最后的最長序列”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.