在 bash 脚本中嵌入 python
embed python in bash script
我是 python 的新手,我正在尝试将其嵌入到 bash 脚本中。我有以下 bash shell 脚本:
#!/bin/bash
while read line
do
ORD=`echo $line | cut -c 1-7`
if [[ -r ../FASTA_SEC/COMBI_RAW/${ORD}_COMBI_RAW.fa ]]
then
touch ../Results/Log_Files/Log_${ORD}.txt
for (( win = 2; win < 20; win += 2 )); do
printf 'The value of win is %d, now entereing inner loop\n' "$win"
for (( per = 50; per < 100; per += 2 )); do
printf 'Value of per is %d\n' "$per"
WCNO=`grep -o "n\|N" ../FASTA_SEC/COMBI_RAW/${ORD}_COMBI_RAW.fa | wc -l`
WCNF=`grep -o "n\|N" ../Results/COMBI/${ORD}_COMBI/${ORD}_w${win}_p${per}_COMBI.fa | wc -l`
WCAO=`grep -o "a\|A\|g\|G\|t\|T\|c\|C" ../FASTA_SEC/COMBI_RAW/${ORD}_COMBI_RAW.fa | wc -l`
WCAF=`grep -o "a\|A\|g\|G\|t\|T\|c\|C" ../Results/COMBI/${ORD}_COMBI/${ORD}_w${win}_p${per}_COMBI.fa | wc -l`
PERN=`echo print ($WCNO-$WCNF)/$WCNO. | python`
echo $ORD $PERN
done
done
else
echo ${ORD}"_COMBI_RAW.fa does not exist"
fi
done < ./Data_ORD.txt
我想执行存储在调用 python
的变量中的百分比计算
PERN=`echo print ($WCNO-$WCNF)/$WCNO. | python`
括号有问题,所以当我 运行 bash 脚本时得到以下输出:
command substitution: line 17: syntax error near unexpected token `('
command substitution: line 17: `echo print ($WCNO-$WCNF)/$WCNO. | python'
bash有问题吗?据我所知,操作顺序在 python 中用括号定义。
谢谢,
bash 在您不希望的时候解释 (
。您需要将发送至 python 的表达式括在引号中。
PERN=`echo "print ($WCNO-$WCNF)/$WCNO." | python`
如果你很好奇bash认为你在做什么...
构造 (...)
在子 shell 中向 运行 指示某些内容。首先,bash 将插入变量 $WCNO
和 $WCNF
。然后它会尝试 运行 parens 中的东西作为子 shell 中的命令。除非该字符串恰好作为命令存在,否则 bash 会抱怨,因为它试图找到的命令不存在。
另请参见 Unix.SE 上的 this answer。
我是 python 的新手,我正在尝试将其嵌入到 bash 脚本中。我有以下 bash shell 脚本:
#!/bin/bash
while read line
do
ORD=`echo $line | cut -c 1-7`
if [[ -r ../FASTA_SEC/COMBI_RAW/${ORD}_COMBI_RAW.fa ]]
then
touch ../Results/Log_Files/Log_${ORD}.txt
for (( win = 2; win < 20; win += 2 )); do
printf 'The value of win is %d, now entereing inner loop\n' "$win"
for (( per = 50; per < 100; per += 2 )); do
printf 'Value of per is %d\n' "$per"
WCNO=`grep -o "n\|N" ../FASTA_SEC/COMBI_RAW/${ORD}_COMBI_RAW.fa | wc -l`
WCNF=`grep -o "n\|N" ../Results/COMBI/${ORD}_COMBI/${ORD}_w${win}_p${per}_COMBI.fa | wc -l`
WCAO=`grep -o "a\|A\|g\|G\|t\|T\|c\|C" ../FASTA_SEC/COMBI_RAW/${ORD}_COMBI_RAW.fa | wc -l`
WCAF=`grep -o "a\|A\|g\|G\|t\|T\|c\|C" ../Results/COMBI/${ORD}_COMBI/${ORD}_w${win}_p${per}_COMBI.fa | wc -l`
PERN=`echo print ($WCNO-$WCNF)/$WCNO. | python`
echo $ORD $PERN
done
done
else
echo ${ORD}"_COMBI_RAW.fa does not exist"
fi
done < ./Data_ORD.txt
我想执行存储在调用 python
的变量中的百分比计算PERN=`echo print ($WCNO-$WCNF)/$WCNO. | python`
括号有问题,所以当我 运行 bash 脚本时得到以下输出:
command substitution: line 17: syntax error near unexpected token `('
command substitution: line 17: `echo print ($WCNO-$WCNF)/$WCNO. | python'
bash有问题吗?据我所知,操作顺序在 python 中用括号定义。
谢谢,
bash 在您不希望的时候解释 (
。您需要将发送至 python 的表达式括在引号中。
PERN=`echo "print ($WCNO-$WCNF)/$WCNO." | python`
如果你很好奇bash认为你在做什么...
构造 (...)
在子 shell 中向 运行 指示某些内容。首先,bash 将插入变量 $WCNO
和 $WCNF
。然后它会尝试 运行 parens 中的东西作为子 shell 中的命令。除非该字符串恰好作为命令存在,否则 bash 会抱怨,因为它试图找到的命令不存在。
另请参见 Unix.SE 上的 this answer。