如何使用 read -ra 内联?

yuk*_*say 2 python bash

我需要从 python 运行一个命令,所以我正在做:

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

但它说:

sh: 1: Syntax error: redirection unexpected
Run Code Online (Sandbox Code Playgroud)

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

IFS="."
for f in data/* 
do 
    read -ra ADDR <<< "$f"
    mv "$f" "data/${ADDR[-1]}"
done;
Run Code Online (Sandbox Code Playgroud)

它工作得很好。如何修复它以在一行中工作?

gle*_*man 5

@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
'''])
Run Code Online (Sandbox Code Playgroud)

但在这一点上,你最好在 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)
Run Code Online (Sandbox Code Playgroud)

  • 我同意这种纯 python 方法。 (2认同)