如何内联使用 read -ra?

如何内联使用 read -ra?

我需要从 python 运行一个命令,因此我正在执行以下操作:

os.system('IFS=".";for f in data/* ; do read -ra ADDR <<< "$f";     mv "$f" "data/${ADDR[-1]}"; done;')

但它说:

sh: 1: Syntax error: redirection unexpected

但如果我在 bash 中运行它,它就可以正常工作:

IFS="."
for f in data/* 
do 
    read -ra ADDR <<< "$f"
    mv "$f" "data/${ADDR[-1]}"
done;

它运行得很好。我该如何修复它,让它在一行中运行?

答案1

@steeldriver 已经指出了问题所在。你可以用以下方法解决它:

import subprocess
subprocess.run(['bash', '-c', '''
    IFS="."
    for f in data/*; do
        read -ra ADDR <<< "$f"
        [[ ${#ADDR[@]} -gt 0 ]] && mv "$f" "data/${ADDR[-1]}"
    done
'''])

但此时,你最好用 python 来完成整个操作,而不是调用 bash:类似

for f in os.scandir("data"):
    if f.is_file():
        addr = f.name.split(".")[-1]
        if f.name != addr:
            os.rename(f.path, "data/"+addr)

答案2

以下@steeldriver 评论和@glenn jackman 回答:

os.system('/bin/bash -c \'IFS=".";for f in data/* ; do read -ra ADDR <<< "$f";     mv "$f" "data/${ADDR[-1]}"; done; \' ')

相关内容