Entendo e aceito a premissa de que o script defensivo 1 shell é prudente e, a longo prazo, mais sustentável.
Muitas das respostas às perguntas sobre processamento de texto aqui seguem esse princípio, incorporando as contingências de respostas para nomes de arquivos não ortodoxos; que podem conter espaços, traços e novas linhas.
Qual a predominância de novas linhas nos nomes de arquivos? Especificamente:
- Algum aplicativo cria nomes de arquivos que incluem novas linhas por padrão?
- Existem situações em que seria desejável criar esses nomes de arquivos?
- Ou eles são predominantemente uma instância de erro do usuário?
[1] Significado do planejamento e gerenciamento da maior variedade possível de cenários e contingências ...
Pergunta inspirada no comentário (bastante queixoso) sobre essa questão .
shell-script
filenames
newlines
jasonwryan
fonte
fonte
Respostas:
Nunca vi um nome de arquivo com uma nova linha diferente daquela criada deliberadamente para testar aplicativos que manipulam nomes de arquivos. Os nomes de arquivo que contêm novas linhas podem aparecer porque:
O POSIX define um nome de arquivo como “um nome que consiste em 1 a {NAME_MAX} bytes usado para nomear um arquivo. Os caracteres que compõem o nome podem ser selecionados no conjunto de todos os valores de caracteres, exceto o caractere de barra e o byte nulo. Os nomes de arquivos ponto e ponto-ponto tem um significado especial.”Não há nenhuma garantia de que cada sistema de arquivos vai aceitar‘’nomes de arquivos estranhos (o único garantido personagens são letras ASCII, dígitos, período, hífen e sublinhado , ou seja
A-Z
,a-z
,0-9
e._-
, com hífen proibido na primeira posição), mas a maioria dos sistemas de arquivos nativos das organizações modernas o fazem.fonte
spaces
nos nomes de arquivos não é garantido que seja portátil? Seria útil se você esclarecesse que esses três últimos caracteres sãoperiod, underscore, and hyphen
. Com o link sublinhado, é difícil dizer.,
(usado pelo RCS),:
(usado pelo X.org),~
(usado por muitos programas em arquivos de backup),… Mas eles são suportados por quase todos os sistemas modernos.Ao escrever um artigo, coleciono frequentemente uma bibliografia de arquivos PDF de várias fontes. Nem todos contêm os metadados corretos, o que significa que às vezes copio e cole o título do papel do visualizador de PDF no nome do arquivo. Isso geralmente resulta em novas linhas no nome do arquivo, mas nunca foi um problema com nenhuma ferramenta que eu usei.
IMHO não há nada de "defensivo" em codificar para um padrão .. um padrão que afirma que novas linhas são permitidas em nomes de arquivos. Se o seu script não manipular todos os nomes de arquivos permitidos no padrão, ele será quebrado.
fonte
Eu nunca vi usuários NORMAL usarem novas linhas nos nomes de arquivos. Parece que o objetivo principal é (1) facilitar a subversão do invasor e (2) tornar mais difícil a criação de programas seguros :-(. No entanto, os gostos modernos do Unix (como o Linux) os permitem , então você precisa se preparar para eles, se quiser um programa que resista ao ataque.
"Nomes de arquivos e nomes de caminho no Shell: como fazer isso corretamente" mostra como lidar com isso corretamente.
fonte