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

6

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

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

cd $path

вместо

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

каждый раз.

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

Ответы:

6

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

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

на ваш .tcshrc

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

cd $P1
akira
источник
10

В оболочке Bash:

export FOO="/a/b/c"

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

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

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

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

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

или в баш, а не export:

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

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

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

cd $ your_path

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

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

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

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

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

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

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

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

$EDITOR ~/.cshrc

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

phogg
источник
0

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

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

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

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

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

kmarsh
источник