Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在没有任何解释的情况下传递bash变量?_Python_Bash_Parameters - Fatal编程技术网

Python 如何在没有任何解释的情况下传递bash变量?

Python 如何在没有任何解释的情况下传递bash变量?,python,bash,parameters,Python,Bash,Parameters,我有一个bash代码,如下所示 python "$TM" python "$TM" 问题是$TM可以是任何字符,包括`字符。当$TM有“abc”时,bash会尝试将abc作为命令运行,然后再将其作为参数提供给python 我怎样才能防止这种情况?我如何在没有任何解释的情况下逐字传递$TM 补充 我需要更多的解释 我正在使用TextMate Bundle编辑器,以便使用缓冲区($TM_SELECTED_TEXT或$TM_CURRENT_LINE)调用bash。缓冲区是我在TextMate编辑器

我有一个bash代码,如下所示

python "$TM"
python "$TM"
问题是$TM可以是任何字符,包括`字符。当$TM有“abc”时,bash会尝试将abc作为命令运行,然后再将其作为参数提供给python

我怎样才能防止这种情况?我如何在没有任何解释的情况下逐字传递$TM

补充 我需要更多的解释

我正在使用TextMate Bundle编辑器,以便使用缓冲区($TM_SELECTED_TEXT或$TM_CURRENT_LINE)调用bash。缓冲区是我在TextMate编辑器中所做的选择。bash代码如下所示

#!/bin/bash

if [ -n "$TM_SELECTED_TEXT" ]; then
    TM="$TM_SELECTED_TEXT"
else

if [ -n "$TM_CURRENT_LINE" ]; then
    TM="$TM_CURRENT_LINE"
fi

fi

/usr/bin/python /Users/smcho/smcho/works/prgtask/textmate/repeat.py "$TM"
repeat.py如下所示

import sys

inputString = sys.stdin.read().decode('utf-8')
inputString = inputString.rstrip().lstrip()

content = inputString[0:-2]
mark = inputString[-1]

r_num = len(content)
string = "%s\n%s" % (content, mark * r_num)
sys.stdout.write(string)
sys.exit(0)
如果输入为“abc:-”,它将把字符串转换为“abc\n-”


问题是,如果输入包含``字符,bash会在将其作为参数发送到python代码之前对其进行求值

您的问题有点模糊,但您是否尝试过通过引用
$TM
来防止分词来解决您的问题:


我想你弄错了。Bash没有“扩展”
TM
,因为它包含反勾号(这将是一个可怕的安全漏洞),变量已经包含命令的输出。您应该引用反勾号以防止发生流程替换:

$ TM="`ls`"
$ echo $TM
file1 file2
vs:


为什么首先使用bash作为中介

#!/usr/bin/env python

import os

tm = os.environ.get('TM_SELECTED_TEXT', "") or \
     os.environ.get('TM_CURRENT_LINE', "")
等等


您的repeat.py无论如何都不会对该参数做任何处理。

只是澄清一下,您希望传递
TM
变量的内容而不进行任何解释,而不是传递文本3字符字符串“$TM”,对吗?奇数。My bash没有在变量的结果中展开反引号,尽管其手册页说命令替换发生在参数展开之后。您能显示
repeat.py
的内容吗?您发布的Bash脚本中没有任何内容可能是问题的根源。@Dennis Williamson:我上传了它。我不确定这是否是结论,但请将这一行添加到您的Bash脚本中,然后查看结果文件并发布结果
echo'$''$SHLVL'>/tmp/eval.out
@tokland:问题是$TM刚刚给了我。我详细阐述了这个问题。或者,使用单引号而不是双引号:''ls`'@prosseek:bash不会(不应该)在变量中运行那些反勾号,除非整个过程再次求值(是这样吗?)。然后试试已经建议过的“$TM”。@proseek:如果像看起来那样再次评估整个过程,引用它们是没有帮助的。您必须对字符串进行转义。@tokland:这就是我现在使用的解决方案,我只是想检查一下我是否可以让bash处理这个问题。1125 upotes:925 downvotes==1:1.2或82%的向下/向上比率。如果你按总票数加权,我看到的最高票数。@SiegeX:我得到了那部分,但沃伦特怎么会对这个答案投反对票呢?@hop你得问问投票给你的那个人。不确定这是否是可见的信息。@SiegeX:对不起,我以为是这样的you@Thor当时我和罗斯都没有回答。看见
$ TM="\`ls\`" # or TM='`ls`'
$ echo $TM
`ls`
#!/usr/bin/env python

import os

tm = os.environ.get('TM_SELECTED_TEXT', "") or \
     os.environ.get('TM_CURRENT_LINE', "")