Crie um diretório separado para reproduzir (para facilitar a limpeza posteriormente, principalmente); isso usa o valor de $TMPDIR
se estiver definido, caso contrário /tmp
:
mkdir "${TMPDIR-/tmp}/testing"
cd "${TMPDIR-/tmp}/testing"
Crie arquivos separados, mas parecidos entre si devido ao espaço em branco (espaço, guia, nova linha, retorno de carro, backspace):
touch -- a b 'a ' 'b ' 'a b' 'a b' $'a\bb'
touch -- a$'\xe2\x80\x82'b a$'\xe2\x80\x83'b a$'\t'b a$'\n'b a$'\r'b
Crédito para o Patrick acima . Os dois códigos hexadecimais são separadores de espaço UTF-8, conhecidos como porca e carneiro ; "no contexto bidirecional, atua como espaço em branco e não é espelhado. O (s) glifo (s), em circunstâncias, podem ser confundidos com outros 20 glifos".
Crie um arquivo simples e um que se expandisse para o primeiro se fosse tratado como um globo:
touch -- x '[x]'
Os créditos acima para Wumpus Q. Wumbley .
Na mesma linha:
touch -- 'a?b' 'a*b'
Os créditos acima são dave_thompson_085 nos comentários aqui.
touch -- foo\`echo\ malicious\`bar
Crédito para o acima para godlygeek .
Um nome de arquivo que será expandido para algo diferente (e execução potencialmente arbitrária!) Se avaliado em um contexto de shell:
touch '$( echo boom )'
Usar:
touch -- single\'quote double\"quote back\\slash
para capturar tentativas de colocar um nome de arquivo entre aspas sem sair de aspas.
touch -- -a -b -c -r -R - a=x
Os créditos acima para Stéphane Chazelas .
Crie um pipe nomeado e link simbólico (para criar arquivos que não são "regulares"):
mkfifo fifo
ln -s a alink
Crie subdiretórios com vários espaços em branco incluídos em seus nomes, juntamente com arquivos de token dentro deles:
mkdir subdir "subdir 1" "subdir 2" "subdir 3 " subdir$'\n'4
touch subdir/file0 "subdir 1"/file1 "subdir 2"/file2 "subdir 3 "/file3 subdir$'\n'4/file4
Crie nomes de arquivos contendo apenas *
(possivelmente problemático para remover), um nome de arquivo que consiste apenas em um espaço (regular!), Um link simbólico morto, um link simbólico que faz um loop em si mesmo e um subdiretório com um link para o diretório pai:
touch -- '*' '**' '***' ' '
ln -s /does/not/exist dead
ln -s loop loop
mkdir subdir_with_link
(cd subdir_with_link && ln -s .. parent)
Mais nomes de arquivos diversos. Os dois últimos são unicode para "barra fracionária" e "barra de divisão".
touch -- '(' '!' '!!' $'\xe2\x81\x84' $'\xe2\x88\x95'
Ideias de Scott :
touch -- '-' '--' ';' '&' '|' '<' '>' '$' ')' '{' '}' = \\ '!' '#' '{a,b}'
Personagens inofensivos em alguns locais, mas perigosos em outros:
touch $'X\xa0Y' # non-breaking space in iso8859-1 which is considered
# "blank" and "space" in some locales
touch $'\xa3\x5c' $'\xa3\x60' # α and ε in BIG5 or BIG5-HKSCS charset, but
# �\ and �` in ASCII
Caracteres que têm a mesma classificação em alguns locais:
touch ① ② # sorts the same in GNU locales, order non-deterministic.
Arquivos que escapam da .[!.]* *
glob (às vezes usados para expandir arquivos ocultos e não ocultos):
touch ..foo ...
a?b
ea*b
(citado, é claro). @muru: as sequências de bytes E2 80 82/83 são a codificação UTF-8 de U + 2002 EN SPACE e U + 2003 EM SPACE #-
e--
, embora, dependendo dos requisitos do script, talvez seja impossível acessá-los sem orientação./
. E eu estou surpreso que há tão poucos com os não-glob caracteres shell especiais, como;
,&
,|
,<
,>
,$
,(
,)
,{
,}
,=
,\
,!
, e#
- por exemplo,{a,b}
.