Stáhl jsem si lessn na svůj webový server a rozbalil jsem jej.
Obsahuje složku s názvem -
. Předpokládal jsem, že vím, jak se s tím vypořádat, ale nevím.
Zkoušel jsem cd -- -
, ale to nemá požadovaný účinek. Zdá se, že na to nemá vliv ani používání uvozovek. Dal jsem lomítka všude, bez úspěchu.
Jaký je správný způsob změny do této složky?
Přijatá odpověď:
Chcete-li zabránit tomu, aby to byl parametr, snažíme se k němu něco přidat. Aktuální adresář je přístupný pomocí .
, tedy podsložku -
lze k němu přistupovat alternativně pomocí ./-
.
cd ./-
Důvod, proč cd -- -
nefunguje, protože je to implementováno jinak, když porovnáte rm
(viz man rm
) na cd
(viz man bash
nebo man cd
), cd
má jinou interpretaci, která vidí -
jako parametr (viz man bash
nebo man cd
).
Je třeba také poznamenat, že cd
je funkce vestavěná do shellu, jak lze číst v této odpovědi:
cd
není externí příkaz – je to funkce zabudovaná do shellu. Spouští se v kontextu aktuálního shellu a ne, jak to dělají externí příkazy, v kontextu fork/exec’d jako samostatný proces.
To vysvětluje, proč je implementace odlišná, protože Bash a Coreutils jsou dvě různé věci.
Předpokládejme, že tomu nevěříte, jak to potvrdíme? Použijte which
a type
.
$ which cd && type cd
which: no cd in (/usr/local/bin:/usr/bin:/bin:/opt/bin:/usr/x86_64-pc-linux-gnu/gcc-bin/4.7.2:/usr/games/bin
cd is a shell builtin
$ which rm && type rm
/bin/rm
/bin/rm is /bin/rm