Fornecendo argumento para um comando após a substituição

0

Estou tentando obter um nome de arquivo da pasta ~/Pictures e fornecê-lo como um argumento para o comando nomacs . O nome do arquivo contém alguns espaços, então estou usando a substituição do Bash para escapar de espaços (eu também quero pegar o último arquivo na pasta).

O código:

names=$(\ls ~/Pictures * | tac) 
SAVEIFS=$IFS
IFS=$'\n'
names=($names)
IFS=$SAVEIFS
screenshot=~/Pictures/${names[0]}
screenshot=${screenshot// /\ }
nomacs $screenshot

Exemplo do nome do arquivo: Screenshot from 2017-09-13 18-05-42.png

O problema é que nomacs $screenshot não funciona, mas quando eu executo nomacs Screenshot\ from\ 2017-09-13 18-05-42.png , ele funciona como esperado.

Devo usar alguma técnica especial de Bash para escapar de espaços?

    
por syntagma 13.09.2017 / 18:30

1 resposta

2

Pelo que eu recebi do seu script, você está revertendo a saída de ls e selecionando o primeiro item. Aqui está uma maneira diferente de fazer isso com o bash:

files=(~/Pictures/*)
nomacs "${files[-1]}"

Isso preenche uma matriz com a expansão glob de ~/Pictures/* , em seguida, passa o último elemento para o programa nomacs .

    
por 13.09.2017 / 18:39