Как мне установить переменные $ в Unix?

19662
Lazer

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

Например: я хочу быть в состоянии сделать это

cd $path 

вместо

cd /a/b/c/d/e/f 

каждый раз.

6
Используете ли вы "C Shell" (`csh`) или более распространенную оболочку Borne / Bash (` sh` и `bash` соответственно)? mctylr 14 лет назад 1
@mctylr: C Shell Lazer 14 лет назад 0

6 ответов на вопрос

10
Paul Nathan

В оболочке Bash:

export FOO="/a/b/c"

И вы не хотите использовать $ path. Это особая переменная.

+1 хороший момент о неиспользовании $ path. Это было бы плохо. DaveParillo 14 лет назад 2
Ну, $ PATH - это специальная переменная, $ path - нет. Я все еще избегаю использовать это все же. John T 14 лет назад 10
Вам, вероятно, не нужен экспорт: достаточно было бы просто "foo = / a / b / c", если вам нужно только обратиться к этой переменной в текущей оболочке. Если вы хотите, чтобы переменная распространялась на дочерние процессы (например, когда вы запускаете другие программы из оболочки), то вам понадобится команда export. njd 14 лет назад 2
$ path в порядке, как указано выше. И этот вопрос помечен csh, и этот синтаксис для bash. Justin Smith 14 лет назад 0
7
Dennis Williamson

Маловероятно, что вам нужна ваша переменная в среде.

Итак, вместо csh setenvвы можете сделать:

set dir="/a/b/c/d/e/f" cd $dir 

или в Bash вместо export:

dir="/a/b/c/d/e/f" cd $dir 
В чем различия между `set dir =" / a / b / c / d / e / f "` и `setenv dir" / a / b / c / d / e / f "`? Lazer 14 лет назад 0
@Lazer: `setenv` экспортирует переменные, чтобы они были доступны в дочерних процессах. `set` устанавливает переменные, которые будут использоваться только в текущей среде (скрипт или интерактивная оболочка). Большую часть времени вам нужно только использовать `set`. Кроме того, `set` поддерживает массивы, а` setenv` - нет. Dennis Williamson 14 лет назад 0
6
akira

предполагая, что вы действительно хотите синтаксис csh / tcsh (как вы отметили свой вопрос), поставьте это

setenv P1 "/a/b/c/d/e/f" 

на ваш .tcshrc

после этого вы можете сделать

cd $P1 
3
Satanicpuppy

Используйте экспорт.

export your_path = "/ a / b / c / d / e / f"

cd $ your_path

Если вы хотите, чтобы он сохранялся при входе в систему, вам нужно отредактировать его в файле .profile.

Или `~ / .bash_profile` или, для общесистемного эффекта,` / etc / profile`. +1 за упоминание о сохранении этого, в любом случае. Jonik 14 лет назад 1
Это для неправильной оболочки. Он хотел csh. Justin Smith 14 лет назад 1
Вам почти наверняка не нужно использовать `export`. В Bash или `sh`` your_path = "/ a / b / c / d / e / f" `почти всегда достаточно. Dennis Williamson 14 лет назад 0
0
kmarsh

Для csh вы, вероятно, хотите использовать cdpath . Для bash используйте CDPATH .

Например (bash):

prompt$ export CDPATH=:/a/b/c/d/e  prompt$ cd f cd /a/b/c/d/e/f 

Вы также можете добавить больше целей каталога, разделенных двоеточиями. Ведите двоеточие, чтобы CDPATH сначала проверял ваш текущий рабочий каталог!

0
phogg

Если вы просто хотите использовать путь для одного сеанса, установите переменную как обычно

set long="/some/long/path/to/a/directory" 

Затем вы можете делать это cd "$long"так часто, как захотите, до тех пор, пока оболочка не завершится или вы не установите longснова.

Если вы заинтересованы в том, чтобы переменная была доступна процессам, запущенным из сеанса оболочки, вам следует установить ее в своей среде

setenv long "/some/long/path/to/a/directory" 

Если вы хотите, чтобы переменная была доступна для каждого сеанса, а не только для текущего, вам нужно будет установить ее в своем контроле запуска оболочки.

$EDITOR ~/.cshrc 

Затем добавьте setстроку или setenvстроку, показанную выше, чтобы автоматически устанавливать переменную или переменную окружения для каждого сеанса csh.

Похожие вопросы