Як я можу очистити файл bashrc / zshrc?


1

З часом я додав пучки речей до моєї ПАТИ, і це виглядає досить жахливо. Як я можу це очистити чи який правильний спосіб "переформатувати" все це?

export PATH="$PATH:~/scripts"
export PATH="$PATH:~/Downloads/android-sdk-mac_x86/platform-tools/adb"
export PATH=/opt/local/bin:/opt/local/sbin:$PATH
export PATH="$PATH:~/Downloads/android-sdk-mac_x86/platform-tools:~/Downloads/android-sdk-mac_x86/tools:~/Downloads/android-sdk-mac_x86/platform-tools/adb"
export PATH="$PATH:~/bin"
export PATH="$PATH:~/bin/subl"
export PATH="$PATH:~/.rvm/gems/ruby-1.9.3-head/gems/git-media-0.1.1/bin"

export PATH=$PATH:$HOME/bin:/Users/me/Downloads/android-sdk-mac_86/tools
export PATH=$PATH:$HOME/bin:/Users/me/Downloads/android-sdk-mac_86/platform-tools
export PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11/bin:/.rvm/scripts/rvm:/.rvm/scripts/rvm:/~/Downloads/android-sdk-mac_x86/tools/android:/~/Downloads/android-ndk-r7/:/~/Downloads/android-sdk-mac_x86/platform-tools
export CC=gcc-4.2
export PATH=~/Downloads/android-ndk-r7:$PATH
ANDROID_HOME=~/Downloads/android-sdk-mac_x86
export PATH=${PATH}:$ANDROIDHOME/platform-tools

3
Я не розумію питання. Видаліть рядки, які вам більше не потрібні. Зроблено.
Der Hochstapler

Відповіді:


3

У Bash вам потрібно експортувати змінну лише один раз, а не при кожному призначенні. Видаліть експорт із усіх ваших завдань PATH, після чого поставте export PATHїх у кінці. Якщо ви просто встановлюєте змінну один раз, як, наприклад, з CC, експорт перед нею добре. Ви також можете експортувати їх за допомогою однієї команди, наприклад, з export PATH CC ANDROID_HOME.

Тарбол розподілу для Bash має декілька зручних функцій для попереднього додавання або додавання шляху до змінної. Я думаю, що вони знаходяться у файлі contrib під назвою "pathfuncs". Вони можуть зробити ваш файл rc набагато більш читабельним.

  • add_path додасть запис до кінця змінної PATH
  • pre_path додасть запис до початку змінної PATH
  • del_path видалить запис зі змінної PATH, де б вона не була

Якщо вказати змінну як другий аргумент, вона використовуватиме її замість PATH.

Для зручності ось вони:

# is $1 missing from $2 (or PATH) ?
no_path() {
    eval "case :\$${2-PATH}: in *:$1:*) return 1;; *) return 0;; esac"
}
# if $1 exists and is not in path, append it
add_path () {
  [ -d ${1:-.} ] && no_path $* && eval ${2:-PATH}="\$${2:-PATH}:$1"
}
# if $1 exists and is not in path, prepend it
pre_path () {
  [ -d ${1:-.} ] && no_path $* && eval ${2:-PATH}="$1:\$${2:-PATH}"
}
# if $1 is in path, remove it
del_path () {
  no_path $* || eval ${2:-PATH}=`eval echo :'$'${2:-PATH}: |
    sed -e "s;:$1:;:;g" -e "s;^:;;" -e "s;:\$;;"`
}

Якщо ви додасте їх до файлу запуску bash, ви можете додати його до PATH так:

pre_path $HOME/bin
add_path /sbin
add_path /usr/sbin

Або вкажіть іншу змінну:

pre_path $HOME/man MANPATH
pre_path $HOME/share/man MANPATH
add_path /usr/local/man MANPATH
add_path /usr/share/man MANPATH

Я використовую цей метод у своїх rc-файлах, ставлячи перше pre_paths, а add_paths - друге. Це робить усі зміни мого шляху легко зрозуміти з першого погляду. Ще одна перевага полягає в тому, що рядки є досить короткими, що я можу додати зауважуючий коментар до рядка, якщо необхідно.

А оскільки це функції, ви можете використовувати їх інтерактивно з рядка commend, наприклад, add_path `pwd`додавши поточний каталог до шляху.


Редагувати: виправлення наданого файлу rc функціями, наведеними вище, у мене є таке:

pre_path /opt/local/bin
pre_path /opt/local/sbin
pre_path ~/Downloads/android-ndk-r7

add_path ~/scripts
add_path ~/Downloads/android-sdk-mac_x86/platform-tools
add_path ~/Downloads/android-sdk-mac_x86/tools
add_path ~/Downloads/android-sdk-mac_x86/platform-tools/adb
add_path ~/bin
add_path ~/bin/subl
add_path ~/.rvm/gems/ruby-1.9.3-head/gems/git-media-0.1.1/bin
add_path $HOME/bin
add_path /Users/me/Downloads/android-sdk-mac_86/tools
add_path /Users/me/Downloads/android-sdk-mac_86/platform-tools
add_path /usr/local/bin
add_path /usr/bin
add_path /bin
add_path /usr/sbin
add_path /sbin
add_path /usr/X11/bin
add_path /.rvm/scripts/rvm
add_path /.rvm/scripts/rvm
add_path /~/Downloads/android-sdk-mac_x86/tools/android
add_path /~/Downloads/android-ndk-r7/
add_path /~/Downloads/android-sdk-mac_x86/platform-tools

ANDROID_HOME=~/Downloads/android-sdk-mac_x86
add_path $ANDROID_HOME/platform-tools

export PATH
export CC=gcc-4.2

У вас є певна зачистка, щоб видалити дублікати та привести речі в кращий порядок.


1

Вам цього не потрібно

export PATH="$PATH:~/Downloads/android-sdk-mac_x86/platform-tools/adb"

оскільки adb є виконуваним файлом.

У цьому:

export PATH="$PATH:~/Downloads/android-sdk-mac_x86/platform-tools:~/Downloads/android-sdk-mac_x86/tools:~/Downloads/android-sdk-mac_x86/platform-tools/adb"

Ви могли позбутися від речей після двокрапки (повторення вищезазначеного adb).

У цьому:

експорт

PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11/bin:/.rvm/scripts/rvm:/.rvm/scripts/rvm:/~/Downloads/android-sdk-mac_x86/tools/android:/~/Downloads/android-ndk-r7/:/~/Downloads/android-sdk-mac_x86/platform-tools

ви повторюєте інструменти платформи (останній запис) та android (другий останній запис).

Спробуйте помістити кожен додаток PATH на одну лінію, і всі дупи вискочать на вас.


1

Ви можете розмістити всі модифікації шляху в одному рядку, наприклад,

export PATH="$PATH:~/scripts:~/bin:~/bin/subl"

тощо, але це не зробить його більш читабельним.

У рядку 11, однак, ви більш-менш зробите вище. Принаймні ви скасуєте всі зміни шляху, внесені в рядок 1-10, тому ви можете просто видалити рядок 1-10. Потім можна об'єднати пізніші $PATHзміни, щоб містити їх до одного рядка, але, як я вже сказав, це буде єдиний незрозумілий рядок.


1

Просто швидка думка: я, мабуть, напишу щось подібне:

function addpath() {
    [[ -d "$1" ]] || return 1

    print -rl ${(s.:.)PATH} | grep -q "$1"
    [[ $? != 0 ]] || return 1

    path+="$1"
}

Тоді я поставив би мої шляхи (розділені новими рядками) для кожної машини, де ця конфігурація zsh працює у файлі, наприклад, наприклад, .zsh/paths.d/host1і застосувати цю функцію до кожного рядка вибраного файлу ...

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.