[英]Escaping dollar sign in sh -c
我正在使用在bash中運行命令的應用程序。 這是它正在使用的“模板”:
sh -c '<command> "<argument>"'
請注意,我不能編輯引號,只能編輯命令和參數。 我也無法擺脫美元符號。
除非參數中有美元符號,否則此“模板”可以正常工作:
sh -c 'echo "x=test$test"'
給出以下輸出:
x=test
我如何獲得確切的輸出,即:
x=test$test
如果可以切換引號,則可以執行以下操作:
sh -c "echo '"'x=test$test'"'"
x=test$test
有什么辦法可以做到這一點?
如果您的sh -c
命令是由bash (而不是由基線POSIX shell)運行的,並且您的參數不包含'
文字,那么您可以做一些技巧,如下所示:
#!/bin/bash
sh -c 'echo ""'$'\'x=test$test\'""'
也就是說,字符串"'$'\\'
應該放在<argument>
,而\\'"
應該放在后面。
請注意,這絕對不是針對外殼注入攻擊的安全性 。 為此,我們需要修改argument
的內部內容; 至少要用\\\\
替換\\
用'
\\'
替換。
更好的方法(尤其是從安全性角度考慮)是修復您正在使用的程序,以從代碼中帶外傳遞參數。 要做到這一點,將意味着一個argv如下所示(以下適用於subprocess.Popen(cmd, shell=False)
Python語法給出):
['sh', '-c', 'echo "$1"', '_', 'x=test$test']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.