Como usar read -ra inline?

1

Eu preciso executar um comando do python, então estou fazendo:

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

mas diz:

sh: 1: Syntax error: redirection unexpected

Mas se eu executar isso no bash, tudo funcionará bem:

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

Funciona muito bem. Como posso consertar isso para trabalhar em uma linha?

    
por yukashima huksay 04.01.2018 / 19:42

2 respostas

4

@steeldriver identificou o problema. Você poderia resolvê-lo com:

 
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
'''])

mas, neste ponto, você provavelmente é melhor fazer a coisa toda em python ao invés de chamar o bash: algo como

 
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)
    
por glenn jackman 04.01.2018 / 20:03
1

Seguindo @steeldriver comment e @glenn jackman answer:

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