LINUX.ORG.RU

$PATH

 , ,


0

1

Всем привет!
Учился запускать программу, написанную на Python (в процессе его изучения) из любого места, вследствии чего «поехал» не в ту сторону…
В общем нужно было запускать файл ~/test/test.py из любого места, я думал, что нужно добавить каталог ~/test в переменную $PATH, для осуществления данной операции. В связи с чем добавил в ~/.bashrc следующую строку:

export PATH="$HOME/test:$PATH"

ничего хорошего из этого не вышло…
Я начал пробовать заменять PATH на test, т.е. пробовал

export test="$HOME/test:$PATH"
export test="$HOME/test:$test"

и всякого такого рода переборы, но и из этого ничего путного не вышло…
Потом нашел способ, который заключался в:

  • Создать каталог ~/bin.
  • Создать файл ~/bin/test.py.
  • Добавить в начало файла ~/bin/test.py строку
#!/usr/bin/env python3
  • Сделать файл исполняемым
cd ~/test/
chmod a+x test.py

Но теперь, когда в терминале набираю tes..., в надежде по нажатию TAB запустить команду test.py, он печатает test, по двойному нажатию TAB, выдает

test    test.py

Вопрос заключается в том, как мне теперь убрать этот test из автоподстановки в терминале по нажатию TAB, чтобы осталось только test.py?

не ломай $PATH, ты конечно добавь свой путь, но уже имеющеюся в нём пути перезаписывать не нужно. test удалять из автоподстановки будет неправильным, т.к. это реально существующая команда (программа) в UNIX. скорее всего, она старше тебя, не то, что твоего test.py. поэтому самым правильным подходом будет переименовать твой скрипт из test.py на что-нибудь другое.

Spoofing ★★★★★
()

Ничего, что test и test.py, это два разных названия. А если у тебя будет еще test.sh, test.ps1, test.cmd, test.bat, то и они появятся.

anonymous
()

как мне теперь убрать этот test

Это утилита из coreutils

Сделать файл исполняемым

Вот это надо было сделать на первых шагах, когда в PATH добавляли, тогда и из каталога ~/test бы работало. И при правках $PATH надо сессию новую в терминале открыть или перечитать bashrc.

и всякого такого рода переборы, но и из этого ничего путного не вышло…

Вы так доперебираетесь что потом нужно будет думать как ОС восстановить. Читайте документацию же, ну.

micronekodesu ★★★
()

добавил в ~/.bashrc следующую строку

А bash перезапустить не забыл?

Создать каталог ~/bin.

По канону должно быть ~/.local/bin, но в линуксах на это почему-то забили.

как мне теперь убрать этот test

И отстричь себе яйца по самые уши? ☺
Это стандартная утилита (также являющаяся симлинком на [), убирать его не нужно.

mord0d ★★★★★
()
Ответ на: комментарий от mord0d

По канону должно быть ~/.local/bin, но в линуксах на это почему-то забили.

для дополнения картины: забили на это отдельные сомнительные индивидуумы, я всегда использую ~/.local/{bin,opt} и тп в линуксе. Хотя бы потому, что такой дефолт даже в конфигах прописан. А ~/bin нигде не прописан.

zendrz ★★
()
Ответ на: комментарий от mord0d

По канону должно быть

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

t184256 ★★★★★
()
Ответ на: комментарий от t184256

по-нормальному должно быть разрулено пакетным менеджером

Если менеджер пакетов лезет в хомяк — он делает что-то не так.

И системный $PATH должен управляться администратором, а не софтом, с общесистемным $PATH юзер волен для себя делать что угодно (да хоть unset PATH).

Не все каноны стоят того, чтобы их в 2020 переть.

Это всё влияние Microsoft, которое очень ♥ Linux… в особенно извращённых формах.

mord0d ★★★★★
()
Ответ на: комментарий от zendrz

забили на это отдельные сомнительные индивидуумы

Это пропихивается в массы.

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

Он также был в где-то в freedesktop указан.

А ~/bin нигде не прописан.

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

mord0d ★★★★★
()
Ответ на: комментарий от zendrz

А ~/bin нигде не прописан.

В дефолтном убунтовском (да и подозреваю что в дебиановском) ~/.profile прописан и ~/.local/bin и ~/bin.

PolarFox ★★★★★
()
Ответ на: комментарий от Spoofing

test удалять из автоподстановки будет неправильным, т.к. это
реально существующая команда

@ Spoofing

Ну вот спасиб тебе, добрый человек! А то я уже все «ноги» сбил в поисках решения «проблемы».
Дык значит это не я нечудил - уже радует ;-)

parnyagan
() автор топика
Ответ на: комментарий от mord0d

Если менеджер пакетов лезет в хомяк — он делает что-то не так.

Ровно наоборот. Если пакетами юзера (не важно где лежащими) управляет что-то отличное от единого системного ПМ, то дорога ему на свалку, а на замену ему — системный ПМ. Если пакетами виртуалэнва или текущего шелла, или наружнего к нему шелла- ну ты понял.

t184256 ★★★★★
()
Ответ на: комментарий от micronekodesu

как мне теперь убрать этот test

Это утилита из coreutils

Да ладно.

$ type test
test is a shell builtin
$ echo $SHELL
/bin/bash
akk ★★★★★
()
Ответ на: комментарий от t184256

Может ты ещё скажешь, что init должен управлять интернет-соединением и монтированием дисков? Менеджер пакетов должен устанавливать пакеты и делать их доступными для использования всем пользователям. Всё. Дефолтным окружением должен управлять админ, каждый пользователь волен этот дефолт шатать для себя в своём загончике ($HOME), в том числе доустанавливать и/или компилять себе что он там хочет, это уже его проблема и никого не касается.

mord0d ★★★★★
()
Ответ на: комментарий от mord0d

Менеджер пакетов должен устанавливать пакеты

FTFY. В «систему», в «профиль», в «шелл»… Куда бы ты ни хотел установить пакет, устанавливать его — работа менеджера пакетов. Очевидно, правда?

Никто у пользователя право шатать что попало не отбирает, но и права устанавливать для себя пакеты системным способом его лишать не стоит, согласен?

t184256 ★★★★★
()
Ответ на: комментарий от akk

Понапридумывали одинаковых имен

$ whereis test
test: /usr/bin/test /usr/share/man/man1/test.1.gz

$ man -P cat test | tail -n 1
GNU coreutils 8.30                                                                      August 2019                                                                                TEST(1)

type

Не знал о таком, спасибо!

micronekodesu ★★★
()
Ответ на: комментарий от t184256

Куда бы ты ни хотел установить пакет, устанавливать его — работа менеджера пакетов. Очевидно, правда?

Нет, неочевидно. Есть администратор, который решает общесистемные вопросы, нормальный админ всякий шлак не станет ставить просто потому что какому-то юзеру захотелось. Потому свои хотелки юзер решает сам, если политика позволяет ему это делать (на рабочих машинах нехер ставить всякие игрульки).

Никто у пользователя право шатать что попало не отбирает, но и права устанавливать для себя пакеты системным способом его лишать не стоит, согласен?

Не согласен. Дома ты можешь хоть под хвост долбиться на своих личных машинах. Но это не значит, что ты можешь тащить свои извращения в прод и советовать эти извращения неопытным пользователям.

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

mord0d ★★★★★
()
Ответ на: комментарий от mord0d

нормальный админ всякий шлак не станет ставить просто потому что какому-то юзеру захотелось.

Дома ты можешь хоть под хвост долбиться на своих личных машинах.

Да понял я понял, твой ПМ так не умеет. Конечно это никому не нужно, не заводись.

t184256 ★★★★★
()
Ответ на: комментарий от t184256

твой ПМ так не умеет

А это не его задача. Про systemd я тебе не зря намекнул. Ты ведь так любишь комбайны!

mord0d ★★★★★
()
Ответ на: комментарий от mord0d

А ты «пердолиться». Каждому свое. Чтоб тебе и дальше не ставить никогда софт из экосистемы одного языка с зависимости от другого, не подключать к кому аудиооборудования сложней наушников и не писать сервисов, зависящих от точек монтирования и сетевых подключений. Я даже позавидую.

t184256 ★★★★★
()
Последнее исправление: t184256 (всего исправлений: 1)
Ответ на: комментарий от t184256

А ты «пердолиться».

Жизнь — боль. Меня на ЛОРе изначально считают извращенцем, и я стараюсь поддерживать впечатление. ☺

mord0d ★★★★★
()

Хорошо зарекомендовал себя один из способов, где в домашней директории создаётся каталог bin, если его там нет. Проверить можно командой

echo $PATH При необходимости, создаём mkdir /home/имя пользователя/bin В .bachrc вписываем: export PATH=~/bin:«$PATH»

И уже в эту папку сбрасываем скрипты,какие только фантазия позволит. И не страшно, что что-то можно сломать.

Yasuhiro
()

В общем нужно было запускать файл ~/test/test.py из любого мест

если питонов несколько, например стоит одновременно второй и третий, может понадобиться подкрутить PYTHONPATH, PYTHON. иначе во втором не запустится, в зависимости от использеумых библиотек . или пустую её оставить по умолчанию, чтобы сам по первому питону из PATH попытался определить

выкрутасы там точно такие же, как и с PATH

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.