Яка різниця між цими командами?


5

Яка різниця між цією командою: я використовував cd $HOME/directory/test/перед запуском кожного рядка:

cd ~
cd /
cd ~/
cd -
cd --
cd /.
cd $HOME
cd $USR
cd

І всі вони роблять однакову поведінку. У чому різниця?


будь ласка, задайте одне запитання.
Авінаш Радж

10
@AvinashRaj Вісім окремих питань, по одному на команду? Маючи це одне питання, мені здається краще. Ці команди дуже схожі і роблять подібні речі. Це питання стосується того, чому вони, схоже, роблять те саме. І є гарна, ґрунтовна відповідь, яка, здається, відповідає на все запитання, що, як правило, є підказкою, що це насправді одне питання. З іншого боку, ми можемо знайти якесь раніше питання, щоб обдурити це…
Елія Каган

6
@AvinashRaj: Це одне питання.
Джек

Відповіді:


11

Проста команда, cd <dir>яка змінює каталог <dir>.

  • ~вказує на $HOMEкаталог
  • /вказує кореневий каталог
  • ~/також вказує $HOMEкаталог. Єдина відмінність полягає в тому, що він явно показує, що це каталог (косою косою рисою). cd ~/і cdта cd ~і cd $HOMEвсе роблять те ж саме.
  • cd -Змінює робочий каталог на попередній робочий каталог .

Ці спеціальні символи "." (крапка) і ".." (крапка) [Відносні параметри] :

"." символ посилається на поточний каталог, а символ ".." посилається на батьківський каталог поточного каталогу.


$USERі $HOMEє змінними довкілля

$USER= Ім'я користувача, який зараз увійшов. Цю змінну встановлює система. Ймовірно, ви не повинні змінювати його значення вручну. (наприклад: myuser1)

$HOME = Місце розташування домашнього каталогу користувача, який наразі увійшов у систему (наприклад: / home / myuser1)

Рекомендується використовувати cd "$HOME"або cd "$USER"так, що cdотримує належний вклад у випадку місця тощо.


дякую, І ще одне в чому різниця cd /і cd //.
αғsnιη

1
@KasiyA //трактується як /. Так cd//home само, якcd/home
Пандія

4
@Pandya Ви можете додати інформацію про те, що відбувається, коли ви перейдете cdдо невизначеної змінної середовища. (Змінна розширюється на порожній рядок і cdбез запуску аргументів, що змінює домашній каталог.) Це може бути з тим, що відбувається далі cd $USR, оскільки, хоча USERзмінна майже завжди визначається, USRрідко є.
Eliah Kagan

Я про це не знав -. Це те саме, що і ..тоді?
Джек

4
@Jack: Ні, вони роблять різні речі. cd -перенесе вас до останнього каталогу, де ви працювали (дано $OLDPWD). Він також друкує старий шлях до каталогу. ..посилається на батьківський каталог; cd ..перемістить вас на один рівень вгору. Якщо ви працювали в батьківському каталозі раніше, cd -і вони cd ..будуть мати однаковий ефект.
Амаль Муралі

8
cd ~

Зміни у вашому домашньому каталозі. ~на початку шляху - це абревіатура, що означає "домашній каталог користувача".

cd /

Зміни до кореневого каталогу /. Тут нічого особливого не відбувається.

cd ~/

Заключення /не має ніякої різниці. Це змушує ~інтерпретувати як каталог, але cdвсе одно це робить. (Закінчення /змінює символічне посилання на каталог - порівняйте ls -ld /var/spool/mailта ls -ld /var/spool/mail/.)

cd -

Зміни до каталогу, в якому ви були до попередньої cdкоманди. Це особливий випадок cdкоманди: коли її аргумент -, він робить це.

cd --

У більшості команд, в тому числі cd, аргумент --означає, що все, що з’явиться після цього, буде розглядатися як операнд, а не як опція. Так, наприклад, cd -- -Pозначає перейти в каталог з назвою -P, тоді як cd -Pпередається -Pпараметр (який має значення, якщо шлях, який ви змінюєте, йде через символічне посилання). Коли після аргументу немає аргументу --, він --нічого не робить; ця команда еквівалентна звичайній cd. cdбез аргументів, в свою чергу, це ярлик для cd ~.

cd /.

Еквівалентно cd /тому, що /.це той самий каталог, що і /( .здебільшого корисний самостійно, означає «поточний каталог»).

cd $HOME

Зміни у вашому домашньому каталозі. Це не вдається, якщо шлях до вашого домашнього каталогу містить пробіл або інші символи. Завжди використовуйте подвійні лапки підстановок змінних : cd "$HOME".

cd $USR

Ймовірно, це нічого не робить, тому що USRв вашій оболонці не визначена назва змінної , отже, команда, яка виконується, справедлива cd.


... пробіл чи інші символи . як які персонажі?
αғsnιη

Я пам'ятаю , що в деяких випадках (Баш скрипти) $ HOME / <Деякі каталог або Файл> не працює , і я повинен був використовувати / будинку / $ USER / <директорію або файл> замість цього. Це справедливо і для ~ / <Декого каталогу або файлу> Тому повинні бути певні відмінності, коли доцільно використовувати одне, а не інше (що я не знаю) - я помиляюся?
Саді

@KasiyA $fooзовні котирує рядки mangles, що містять пробіли або символи: \[*?(і більше в деяких конфігураціях оболонок).
Жиль

2
@Sadi У bash-скрипті "$HOME"завжди працює так, щоб означати домашній каталог виклику користувача. "/home/$USER"робить те ж саме, якщо домашній каталог користувача знаходиться в цьому місці (що не завжди буває в інституційних мережах). Якщо вам не потрібно зробити щось, що стосується конкретної установки, /home/$USERце ніколи не підходить.
Жил
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.