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.