无法传递包含 Shell 参数的空格 - 双引号、转义字符等。不起作用

问题描述 投票:0回答:1

美好的一天StackOverflowers,

我正在从 ZSH shell (Mac) 启动 Python3 脚本,但我无法阻止包含空格的参数被解释为单独的参数。 IE。参数“堆栈问题”被解释为两个参数 - “堆栈”和“问题”。

我用双引号将这些论点引起来。我在空格之前插入了 \ 。我尝试过用 {} 包裹起来。我尝试将“”放入一组“”中。我认为发生这种情况是因为我使用 bash 脚本来创建参数,并且它们在解释后被传递给 python。我不是直接调用 python3 执行,而是调用一个 bash 脚本,该脚本然后构造参数,然后为我调用 Python3。

PATH="/Users/fishbones78/miniconda3/bin/":"/Users/fishbones78/miniconda3/cron_env/bin/":"/usr/local/bin":"/usr/bin":"/bin":"/user/sbin"

source /Users/fishbones78/miniconda3/etc/profile.d/conda.sh
conda activate cron_env

IN_DIR="/Users/fishbones78/Raw/"

FP=$(ls -t "${IN_DIR}/reportname"* | head -1)  <---- This is just grabbing the most recent file before passing the path as an argument

sudo -u fishbones78 python3 "[MY PYTHON SCRIPT]" $FP

在调用脚本之前,我已经使用 echo 检查了 $FP 的值,即使它在字符串周围用“”进行回显,它仍然会在 Python 中作为分隔参数的负载而结束。

非常感谢您的回复。

python terminal zsh
1个回答
0
投票

将整个

sudo
参数放入单个字符串中,然后在
$FP
周围使用嵌套引号。

sudo -u fishbones78 "python3 '[MY PYTHON SCRIPT]' '$FP'"

否则,

sudo
只是连接参数,并且即使您引用它,
$FP
也不再被视为单个单词。

© www.soinside.com 2019 - 2024. All rights reserved.