2016-02-29 6 views
0

Я знал, что существует переменная PWD, которая изменяется при вводе команды cd. Но когда я пытаюсь изменить его вручную, текущий каталог не изменяется. Как напрямую обращаться с PWD?Как я могу напрямую манипулировать PWD?

+6

Вы пытаетесь изменить PWD или пытаетесь изменить текущий каталог? Чего вы действительно пытаетесь достичь, манипулируя PWD напрямую, а не используя 'cd'? То есть, неясно, какова ваша фактическая цель, и я подозреваю, что ваш вопрос может быть проблемой [XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). – kaylum

+0

Я просто хотел сделать то же самое, что и команда cd, но по-другому (путем изменения PWD вручную). –

+3

Ну, очевидно, что изменение 'PWD' не достигает того, что вы нашли. Потому что 'cd' - это кошка, которая wags хвост PWD, а не наоборот. 'cd' является частью оболочки. Большинство оболочек написано на C. Поэтому, если вы хотите сделать то, что он делает, напишите C (или какой-то другой язык) код, который делает то же самое, что и он. В C функция ['chdir'] (http://linux.die.net/man/2/chdir) может использоваться для изменения текущего рабочего каталога. – kaylum

ответ

0

По крайней мере, на компьютерах Mac и Linux, работающих под управлением bash, вы можете просто перезаписать переменную, поэтому запуск PWD =/изменит ваш текущий каталог (в подсказке) на /.

Переменная PWD в bash управляет рабочим каталогом оболочки (снова только приглашение), и вы увидите, что каталог после команды PWD = был изменен, но команда pwd не подвержена влиянию изменения.

<0>[email protected]:~$ PWD=/ 
<0>[email protected]:/$ pwd 
/Users/xxxx 

Теперь переменная PWD среды Баш подсказки вещь и не реальный рабочий каталог, и не модифицирует его полезное, что нужно сделать, если вы на самом деле не использовать команду «CD».

+3

Он просто меняет приглашение, он не меняет каталог. –

+0

Woops. Это правильно @thatotherguy – Keystone

2

Хотя другие оболочки также могут поддерживать такую ​​переменную, переменная $PWD обычно специфична для оболочки bash.

bash manual говорит:

PWD

Текущий рабочий каталог, установленный в кд встроенной команды.

Значение будет установлено при использовании cd встроенной команды, чтобы изменить каталог, но удар не изменит текущий каталог при установке $PWD.

4

POSIX describes PWD:

Назначение этой переменной может быть проигнорировано.

Назначения не являются особыми в bash, тире, золе, zsh или ksh, и значение будет просто перезаписано в следующий раз, когда каталог изменений оболочки.

Смежные вопросы