Utwórz oddzielny katalog do gry (głównie w celu ułatwienia późniejszego czyszczenia); wykorzystuje to wartość $TMPDIR
if, jeśli jest ustawiona, w przeciwnym razie /tmp
:
mkdir "${TMPDIR-/tmp}/testing"
cd "${TMPDIR-/tmp}/testing"
Twórz pliki, które są oddzielne, ale wyglądają podobnie ze względu na białe znaki (spacja, tabulator, znak nowej linii, znak powrotu karetki, 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
Uznanie za powyższe dla Patricka . Te dwa kody szesnastkowe to separatory spacji UTF-8 znane jako nakrętka i baranina ; „w kontekście dwukierunkowym działa jak Biała Przestrzeń i (nie) jest dublowana. Glif (y) można w pewnych okolicznościach mylić z 20 innymi glifami”.
Utwórz zwykły plik i taki, który rozwinąłby się do pierwszego, gdyby był traktowany jako glob:
touch -- x '[x]'
Uznanie za powyższe Wumpus Q. Wumbley .
W podobnej żyle:
touch -- 'a?b' 'a*b'
Podziękowania za powyższe dla dave_thompson_085 w komentarzach tutaj.
touch -- foo\`echo\ malicious\`bar
Uznanie za powyższe godlygeek .
Nazwa pliku, która rozwinie się do czegoś innego (i potencjalnie dowolnego wykonania!), Jeśli zostanie oceniona w kontekście powłoki:
touch '$( echo boom )'
Posługiwać się:
touch -- single\'quote double\"quote back\\slash
przechwytywać próby umieszczenia nazwy pliku w cudzysłowach bez cytowania znaków.
touch -- -a -b -c -r -R - a=x
Uznanie za powyższe dla Stéphane Chazelas .
Utwórz nazwaną potok i dowiązanie symboliczne (aby utworzyć pliki, które nie są „zwykłe”):
mkfifo fifo
ln -s a alink
Twórz podkatalogi, które zawierają różne białe znaki w swoich nazwach, wraz z plikami tokena w nich:
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
Twórz nazwy plików zawierające tylko *
(prawdopodobnie problematyczne do usunięcia), nazwę pliku składającą się tylko z (zwykłej!) Spacji, martwego dowiązania symbolicznego, dowiązania symbolicznego, które zapętla się, oraz podkatalog z linkiem z powrotem do katalogu nadrzędnego:
touch -- '*' '**' '***' ' '
ln -s /does/not/exist dead
ln -s loop loop
mkdir subdir_with_link
(cd subdir_with_link && ln -s .. parent)
Więcej różnych nazw plików. Dwa ostatnie to Unicode dla „ułamkowego ułamka” i „ułamkowego podziału”.
touch -- '(' '!' '!!' $'\xe2\x81\x84' $'\xe2\x88\x95'
Pomysły Scott :
touch -- '-' '--' ';' '&' '|' '<' '>' '$' ')' '{' '}' = \\ '!' '#' '{a,b}'
Znaki, które są nieszkodliwe w niektórych lokalizacjach, ale niebezpieczne w innych:
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
Znaki, które sortują to samo w niektórych lokalizacjach:
touch ① ② # sorts the same in GNU locales, order non-deterministic.
Pliki, które uciekają przed .[!.]* *
globem (czasami używane do rozwijania zarówno plików ukrytych, jak i nie ukrytych):
touch ..foo ...
a?b
ia*b
(oczywiście cytowany). @muru: sekwencje bajtów E2 80 82/83 są kodowaniem UTF-8 dla SP + EN SPACE i U + 2003 EM SPACE-
i--
chociaż w zależności od wymagań skryptu dostęp do nich bez prowadzenia może być niemożliwy./
. I jestem zaskoczony, że tak mało z non-glob powłoki znaków specjalnych, takich jak;
,&
,|
,<
,>
,$
,(
,)
,{
,}
,=
,\
,!
, i#
- na przykład{a,b}
.