A análise da saída de ls é geralmente uma má ideia . Fazê-lo quando essa saída é uma lista de arquivos de vídeo é uma ideia absolutamente horrível. Arquivos de vídeo quase certamente conterão espaços e outros caracteres estranhos que provavelmente causarão problemas. Aqui está uma alternativa mais segura que faz a mesma coisa:
latest="$(stat --printf '%Y\t%nlatest="$(stat --printf '%Y\t%nlatest="$(stat --printf '%Y\t%nlatest="$(ls ~/Videos/ -t | head -n 1)"
mpv ~/Videos/"$latest"
' * | sort -rzk1 | perl -00pe 's/^\d+\s+(.*?)latest="$(stat --printf '%Y\t%nlatest="$(stat --printf '%Y\t%nlatest="$(stat --printf '%Y\t%nlatest="$(ls ~/Videos/ -t | head -n 1)"
mpv ~/Videos/"$latest"
' * | sort -rzk1 | perl -00pe 's/^\d+\s+(.*?)%pre%.*/$1/s')"
' * | sort -rzk1 | awk -F'\t' -vRS='%pre%' '{print $2; exit}'
' * | sort -zk1 | tail -zn1 | cut -f2-)"
mpv "$latest"
.*/$1/s')"
' * | sort -rzk1 | awk -F'\t' -vRS='%pre%' '{print $2; exit}'
' * | sort -zk1 | tail -zn1 | cut -f2-)"
mpv "$latest"
Ou, se o seu tail não tiver o sinalizador -z :
Ou
%pre% Observe as citações. Você deve sempre citar suas variáveis a menos que você esteja absolutamente certo de que citar irá quebrar alguma coisa. Essa solução usa stat para imprimir a data de modificação do arquivo ( %Y ), uma guia ( \t ), o nome do arquivo ( %n ) e um caractere NULL ( ). Isso é alimentado para classificar o que classifica no primeiro campo ( -k1-z ), a data e espera entrada separada por nulo ( tail ). Em seguida, ele é passado por -n1 para obter a última linha ( -z ) separada por nulo ( cut ) e, finalmente, ~/Videos remove a data deixando apenas o nome do arquivo. Isso garante que você pode lidar com arquivos arbitrários, mesmo com novas linhas em seus nomes.
O erro que você está vendo é difícil de diagnosticar sem saber os nomes dos arquivos em --t . A questão principal é que você não está citando o nome da variável e, como parece haver um arquivo com %code% , isso é considerado um argumento. Se você souber que seus nomes de arquivos nunca conterão novas linhas, também poderá fazer:
Mas isso é realmente um mau hábito para entrar e nunca deve ser usado no código de produção.