Найкраща практика для управління змінними середовищами PATH / середовища?


22

Прямо зараз такий безлад. Кожен раз, коли я встановлюю нову програму, яка робить щось тривіальне в командному рядку, я мушу додавати її в шлях. Насправді я розробляю Ruby і навіть дорогоцінні камені (плагіни / розширення) іноді мають власні виконувані файли, і вони зберігаються в різних папках, і мені в кінцевому підсумку доводиться додавати кілька шляхів до програми. Дійшло до того, що я рухаю тридцять контурів у своїй змінній середовища PATH.

Я обережно копіювати та вставляти їх у домашню папку сортів та встановлювати шлях до цього; це просто не так. Чи існує усталена найкраща практика, яку я пропускаю?


Це таке чудове питання - запускати програми на UNIX так просто, але такий біль у Windows. Прикро, що єдині рішення все ще здаються такою важкою роботою ...
user10550

Відповіді:


13

У моїй %UserProfile%\Appsпапці перебуває ряд невеликих утилітів, таких як архіватори тощо. Потім є ряд пакетних файлів, які я написав і часто використовую, які перебувають у них %UserProfile%\Batches. Для решти, я просто додаю їх до пункту PATH, який робиться інсталятором або за допомогою

setx PATH "%PATH%;%CD%"

з відповідного каталогу. Кількість шляхів до них, ймовірно, повинна коли-небудь ставати проблемою, якщо вміст стає занадто довгим (існують обмеження довжини змінних середовища).

Ви можете (і я іноді це роблю) писати невеликі пакетні файли для обгортки для таких програм. Просто копіювання / жорстке посилання / посилання виконуваного файлу в інший каталог, швидше за все, не працюватиме в Windows, але ви можете легко створити пакетний файл, наприклад, для програми Foo:

@"%ProgramFiles%\Foosoft Foo\foo.exe" %*

і ви можете потім додати папку, у якій ви зберігаєте ці пакетні файли у свій PATH.


Як працюють ці пакетні файли обгортки? Чи працюють вони точно так, як вимагають фактичного шляху? Якщо так, це дивовижно.
Джастін Л.

@Justin: Вони просто делегують всі аргументи, наведені в пакетному файлі, фактичній програмі. Де це місце, вам доведеться знати самі.
Joey

Гм; Я повинен уточнити - чи є якась функціональна різниця між додаванням каталогу бінарних файлів у PATH та створенням файлу пакетного файлу бінарного файлу у користувацький каталог, який знаходиться на PATH?
Джастін Л.

@Justin: Якщо ви знову використовуєте пакетні файли у пакетних файлах, то є. Крім цього я не знаю жодного.
Joey

@Joey Мені подобається ідея обгортки, добре підходить для запуску програм з cmd, але при запуску із запуску..назору це відволікання на cmd-вікно, щоб підскочити до запуску програми, чи є у вас спосіб обійти це? Здається, можна також поставити каталоги для всіх програм на шляху і нехай це буде довгим. так близько ще поки що!
барлоп

10

Я не впевнений у будь-яких конкретних найкращих практиках. Але я вважаю за краще використовувати інструменти редактора GUI PATH для управління змінними PATH. Так що це можна чітко підтримувати.

Список редактора PATH -

Швидкий редактор довкілля

Редмонд PATH редактор


Графічні редактори можуть значно полегшити справу
Джастін Л.

Цей редактор Redmond PATH - це саме те, що я шукав. +1
Натан Рідлі

Питання полягало в управлінні змінною, а не тільки в додаванні елементів. Отже, це найправильніша відповідь, і найкраща практика ІМО, оскільки інші рішення приховують більшу частину змісту змінної PATH.
taurelas

2

Тепер, коли більшість машин Windows поставляється з PowerShell, я використовую багато команд sal / Set-Alias ​​у своєму користувальницькому профілі, тому якщо у додатку є лише одна або дві програми, які я використовую, я створю псевдоніми лише для цих двох команд, а не додавати ціла папка додатка до шляху. Приклади включають SQL Management Studio, Notepad ++, TFS Power Tools (інструмент командного рядка, tfpt.exe). Я також копіюю свій профіль користувача на машини, тому це дозволяє мені перевірити наявність цього додатка на поточній машині перед створенням псевдоніма (іноді попереджаю, якщо додаток не встановлено).

filter ctQuoteString { "`"$_`"" }
filter ctResolvePath { Resolve-Path $_ | select -ExpandProperty Path | ctQuoteString } # used in Edit.ps1

$nppExe = "C:\Program Files (x86)\Notepad++\notepad++.exe"
if ((Test-Path variable:\nppExe) -and (Test-Path $nppExe)) {
    function EditNotepadPP { 
        param ([parameter(ValueFromPipelineByPropertyName=$true)][Alias("FullName","FileName")]$Path) 
        begin { if (! $nppExe) { throw 'variable $nppExe is not defined' } }
        process {
            $Path | ctResolvePath | % { # ctResolvePath will get full path and surround with quotes
                & $nppExe $_
            }
            #AddEditHistory $Path #if you need detailed time tracking, might help to create a log what files you're editting
       } 
    }
    Set-Alias npp EditNotepadPP
}

# I have similar functions for other apps.
Set-Alias vs EditVS
Set-Alias tfe EditTFCheckout
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.