Сценарии Linux без ./


1

У меня есть 2 виртуальные машины. Один из них - Debian Lenny, а другой - Ubuntu. В разных папках Debian есть скрипт с именем «два» (имя «два» одинаковое, но содержимое в разных папках немного различается), и когда я захожу в эту папку, мне просто нужно ввести два и ввести, чтобы сделать это бежать. Когда я скопировал тот же скрипт в Ubuntu, даже после предоставления ему разрешений на выполнение, он все равно не запускается, просто введя два. Я должен напечатать. / Два, чтобы заставить его работать. Можно ли как-нибудь набрать два в их соответствующих папках, и скрипы будут работать без ./?


6
Пожалуйста, не делай этого. Если вы сделаете это, кто-то может создать ловушку-ловушку, создав каталог с вызываемым lsв нем исполняемым файлом . Затем, если вы зайдете в их каталог и напечатаете ls, вы запустите их программу с любым разрешением. Вы должны печатать ./по причине.
Дэвид Шварц

@DavidSchwartz: применяется только .в начале $ PATH, а не в конце.
Гравитация

1
@ Grawity: Это относится в любом случае. Например, много людей печатают dirпо привычке, а потом, lsкогда получают ошибку. Если кто-то знает, что вы делаете это, он может создать программу под названием dir.
Дэвид Шварц

@DavidSchwartz: Хорошо, что dirэто тоже часть coreutils. Но я понимаю вашу точку зрения.
Гравитация

@grawity, шалость мы играли на ничего не подозревающих жертвах с таким PATH, чтобы добавить скрипт , который вторит rm -rf *и ждал некоторое время , в /tmp, в типичных именах опечатки , как sl, pc, cgg...
vonbrand

Ответы:


1

Вы можете добавить текущий каталог к ​​своему пути:

PATH="$PATH:."

При этом текущий каталог всегда будет в пути поиска оболочки.

Вы можете сохранить это, поместив код выше в свой .bashrcили.bash_profile


У меня есть файл .bashrc, но он не имеет ссылки на PATH. Как добавить несколько папок в .bashrc по-вашему. ?
Самир Согай

обычно PATH устанавливается в / etc / profile. Этот файл загружается оболочкой при входе пользователя. Поэтому, когда вы делаете PATH = "$ PATH :.", переменная PATH уже загружена. Если вам нужно больше папок, вам просто нужно добавить пути в строку атрибуции, разделенную двоеточием. Пример: PATH = "$ PATH: / path / to / dir1: / path / to / dir2 :.".
Бруно Коимбра

Я добавил папки в .profile, но это не вступает в силу. Как добавить его в / etc / profile, так как нет места для добавления в файл?
Самир Согай

@SamirSogay, какая у тебя оболочка? Обычно каждая оболочка загружает свои файлы инициализации. Так что, если вы находитесь в Bash, он будет пытаться порядок загрузки последующих: ~/.bash_profile, ~/.bash_login, ~/.profileи загрузит первый найденный (от Баш руководства). Файл /etc/profileзагружается, только если Bash вызывается с --loginпараметром, и это происходит в первую очередь. Как вы сказали, что используете Ubuntu, не могли бы вы проверить, действительно ли вы используете Bash? Если я прав, то оболочкой Ubuntu по умолчанию является Dash.
Бруно Коимбра

3

Вы должны добавить программу / каталог в ваш путь .

Путь, заданный в .bash_profile, будет установлен только в оболочке входа в bash ( bash -l). Если вы введете свой путь, .profileон будет доступен для всего сеанса рабочего стола. Это означает, что даже metacity будет использовать его.

Например ~/.profile:

if [ -d "$HOME/bin" ] ; then
  PATH="$PATH:$HOME/bin"
fi

Кстати, вы можете проверить переменную PATH процесса, посмотрев на его среду в /proc/[pid]/environ. (замените [pid] числом из ps axf)


А для пути вашей активной оболочки вы можете просто сделать echo $PATH.
Хенн

В файле .profile есть ссылки на bash и приватные бинарные файлы. Как добавить / home / ubuntu / TS1 и / home / ubuntu / TS2? Я не понимаю из вашего примера дома / бен.
Самир Согай

1

Вместо добавления. к ПУТИ вам лучше добавить каталог, в котором находится «два». Например, если два действительно / usr / local / bin / two, то вы бы сказали

PATH = $ PATH: / USR / местные / бен

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


Я использовал ваш метод PATH = $ PATH, но когда я открыл другой терминал, он не показывает мой путь в echo $ PATH.
Самир Согай

Да, эта команда будет действовать только для этого конкретного входа в систему. Чтобы сделать его постоянным, вы можете добавить его в свой файл ~ / .profile, как и в ответе krug.
Кит Уолтерс

Так что я должен удалить home / bin из .profile и заменить его своей папкой или есть какой-нибудь способ поместить несколько папок?
Самир Согай

Ваш PATH может включать в себя столько каталогов, сколько вы пожелаете, каждый из которых разделен знаком «:».
Кит Волтерс

Я добавил все свои папки в .profile, но ни одна из них не отображается в echo $ PATH. Я даже перезагрузил мою систему. Я делаю что-то не так? ИЛИ я должен сделать эти изменения в / etc / profile?
Самир Согай
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.