Как управлять Длинными трактами в Bash?

Вам лучше проверить документацию .

Возможно, проблема в URL. Это должен быть косая черта после порта и перед именем базы данных.

String jdbcUrl = "jdbc:mysql://localhost:3306/hb_student_tracker?useSSL=false&serverTimezone=UTC";

8
задан 2 revs 25 March 2009 в 21:03
поделиться

15 ответов

Рассмотрите использование символьных ссылок. У меня есть a ~/work/ каталог, куда я помещаю символьные ссылки на все свои текущие проекты.

Можно также использовать переменные оболочки:

c='/Users/User/.../.../.../.../.../Dev/C'

Затем:

cd "$c"
24
ответ дан 5 December 2019 в 04:28
поделиться

Управление требует и быстрого создания и удаления каталогов. Создайте много каталогов:

mkdir -p user/new_dir/new/_dir/.../new_dir

Удалите рекурсивно много каталогов (быть очень осторожным, когда Вы будете в более низких каталогах!):

rm -r dir/.../new_dir/

Для дополнительных материалов для чтения шпаргалка может помочь Вам:

http://www.scribd.com/doc/2082838/Bash-Command-Line-History-Cheat-Sheet

Это содержит некоторые самородки, но мне скорее трудно читать. Я не могу получить команды, как Meta +>, работая. Они, вероятно, помогают Вам в навигации по длинным каталогам.

1
ответ дан 5 December 2019 в 04:28
поделиться

Проверьте autojmp или dirmarks

1
ответ дан 5 December 2019 в 04:28
поделиться

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

1
ответ дан 5 December 2019 в 04:28
поделиться

Это могло бы также быть полезной функцией, чтобы вставить Ваш .bashrc; это перемещает вверх или много каталогов, или к именованному каталогу, т.е. если Вы находитесь в /a/b/c/d/ можно сделать up 3 или up a заканчиваться в a.

Я понятия не имею, где я нашел это; если Вы знаете, прокомментируйте или добавьте атрибуцию.

function up()
{
    dir=""
    if [ -z "$1" ]; then
        dir=..
    elif [[ $1 =~ ^[0-9]+$ ]]; then
        x=0
        while [ $x -lt ${1:-1} ]; do
            dir=${dir}../
            x=$(($x+1))
        done
    else
        dir=${PWD%/$1/*}/$1
    fi
    cd "$dir";
}
2
ответ дан 5 December 2019 в 04:28
поделиться

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

# alias -g c=/my/super/long/dir/name
# cd c
# pwd
/my/super/long/dir/name

В ударе я думаю самая близкая вещь, которую Вы получите к 'искажению' стиля, должен записать функцию:

function ccd {
  case "$1" in
    c) cd /blah/blah/blah/long/path/number/one ;;
    foo) cd /blah/blah/totally/different path ;;
    "multiword phrase") cd /tmp ;;
  esac
}

Это означает использовать что-то другое, чем "CD" как команда, когда Вы хотите ярлык, но кроме которого, это гибко; можно ли также добавить "ls" к функции так, чтобы она всегда напомнила Вам, что находится в каталоге после Вас CD и т.д.

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

ccd "multiword phrase"

таким образом, это не действительно все что удобный. Но это будет работать, если Вы должны будете.)

2
ответ дан 5 December 2019 в 04:28
поделиться

На основе предложения Andrew Medico проверьте J

2
ответ дан 5 December 2019 в 04:28
поделиться

Существуют фундаментальные известные идеи, как создание псевдонимов:

alias cdfoo="cd /long/path/to/foo"

и также "отбрасывание гальки"

export foo=/long/path/to/foo

и также создание "основанного на проекте" вышеупомянутого. Я использую 'билет, базирующийся' каталоги.

 topdir=ticket_12345
 alias cdfoo="cd home/me/sandbox/$topdir/long/path/to/foo"
 export foo="/home/me/sandbox/$topdir/long/path/to/foo"

но вне всего этого, иногда просто удобно перейти назад и вперед туда, где Вы недавно были, с помощью меню командной строки. (pushd и popd являются громоздкими, по моему скромному мнению).

Я использую (упомянутый ниже) acd_func.sh. После того, как определенный, можно сделать

CD-

видеть список недавних каталогов, с числовым меню

CD-2

перейти к второму новому каталогу.

Очень простой в использовании, очень удобный.

Вот код:

   # Insert into .profile, .bash_profile or wherever
    # acd_func 1.0.5, 10-nov-2004
    # petar marinov, http:/geocities.com/h2428, this is public domain

    cd_func ()

{
  local x2 the_new_dir adir index
  local -i cnt

  if [[ $1 ==  "--" ]]; then
    dirs -v
    return 0
  fi

  the_new_dir=$1
  [[ -z $1 ]] && the_new_dir=$HOME

  if [[ ${the_new_dir:0:1} == '-' ]]; then
    #
    # Extract dir N from dirs
    index=${the_new_dir:1}
    [[ -z $index ]] && index=1
    adir=$(dirs +$index)
    [[ -z $adir ]] && return 1
    the_new_dir=$adir
  fi

  #
  # '~' has to be substituted by ${HOME}
  [[ ${the_new_dir:0:1} == '~' ]] && the_new_dir="${HOME}${the_new_dir:1}"

  #
  # Now change to the new dir and add to the top of the stack
  pushd "${the_new_dir}" > /dev/null
  [[ $? -ne 0 ]] && return 1
  the_new_dir=$(pwd)

  #
  # Trim down everything beyond 11th entry
  popd -n +11 2>/dev/null 1>/dev/null

  #
  # Remove any other occurence of this dir, skipping the top of the stack
  for ((cnt=1; cnt <= 10; cnt++)); do
    x2=$(dirs +${cnt} 2>/dev/null)
    [[ $? -ne 0 ]] && return 0
    [[ ${x2:0:1} == '~' ]] && x2="${HOME}${x2:1}"
    if [[ "${x2}" == "${the_new_dir}" ]]; then
      popd -n +$cnt 2>/dev/null 1>/dev/null
      cnt=cnt-1
    fi
  done

  return 0
}

alias cd=cd_func

if [[ $BASH_VERSION > "2.05a" ]]; then
  # ctrl+w shows the menu
  bind -x "\"\C-w\":cd_func -- ;"
fi
2
ответ дан 5 December 2019 в 04:28
поделиться

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

3
ответ дан 5 December 2019 в 04:28
поделиться

Пользователь jhs предложил Pushd и Popd-commands. Я совместно использую здесь некоторые свои сценарии Bash, которые я нашел в Электроинструментах Unix - книга. Они очень прохладны, когда Ваши каталоги получают слишком длинное :)

#Moving fast between directories 
alias pd=pushd 
alias pd2='pushd +2'  
alias pd3='pushd +3' 
alias pd4='pushd +4'

Команда 'pushd +n' "поворачивает" стек. Обратная команда 'popd +n' удаляет n запись стека. Если Ваш стек становится слишком длинным, используйте 'повторение n popd'. Для примера Ваш стек является 12 каталогами долго:

repeat 11 popd 

Когда Вы захотите видеть свой стек, запишите 'pushd'. Для дополнительных материалов для чтения я рекомендую книгу на страницах 625-626.

3
ответ дан 5 December 2019 в 04:28
поделиться

Однажды я cd'ed в такой длинный каталог, у меня есть это в истории. Затем я просто ввожу Ctrl-R для" (reverse-i-search)" подсказка и тип в нескольких символах, как Dev/C это появляется где-нибудь в пути, и это показывает мне команду, что я дал тогда, и я могу легко перейти к нему снова.

Это работает вполне прилично на практике. Поскольку это не найдет запись, если бы Вы не ввели тот путь в течение достаточно долгого времени, который означал бы делать, работа для создания вещей легче, вероятно, не будет стоить времени. Но это определенно найдет его при использовании его недавно. Который является точно, в чем я нуждаюсь.

В некотором роде это - самоорганизующийся кэш для долгих команд и путей :)

3
ответ дан 5 December 2019 в 04:28
поделиться

Вероятно, самое легкое решение состоит в том, чтобы использовать:

alias cdc='cd /Users/User/.../.../.../.../.../Dev/C'
alias cdbin='cd /Users/User/.../.../.../.../.../Dev/bin'
alias cdtst='cd /Users/User/.../.../.../.../.../Dev/tst'

если Вы только действительно работаете над одним проектом за один раз. Если Вы работаете над несколькими проектами, у Вас мог бы быть другой псевдоним, который изменил каталоги в тех псевдонимах выше.

Так, Вы использовали бы что-то как:

proj game17
cdc
make
proj roman_numerals
cdbin
rm -f *
proj game17 ; cdc

Так как это - полезная вещь иметь, я решил соединить ряд сценариев, которые могут использоваться. Они являются все базирующимися aroung конфигурационный файл, который Вы помещаете в свой корневой каталог, наряду с псевдонимами для определения источника сценариев. Файл "~/.cdx_data" имеет форму:

scrabble:top=~/dev/scrabble
scrabble:src=~/dev/scrabble/src
scrabble:bin=~/dev/scrabble/bin

sudoku:top=~/dev/scrabble
sudoku:src=~/dev/scrabble/src
sudoku:bin=~/dev/scrabble/bin
sudoku:data=~/dev/scrabble/data

и перечисляют все соответствующие проекты (царапните и sodoku в этом случае), и их каталоги (который может отличаться для каждого проекта, но имеют вершину, мусорное ведро, src и данные в этом примере).

Первое действие должно инициализировать материал, таким образом поместить:

. ~/.cdx_init

в конце Вашего .bash_profile и создают "~/.cdx_init" файл как:

alias cdxl='. ~/.cdx_list'
alias projl='. ~/.cdx_projlist'
alias cdx='. ~/.cdx_goto'
alias proj='. ~/.cdx_proj'

Это настраивает четыре псевдонима для определения источника файлов, которые я буду включать ниже. Использование:

cdxl     - List all directories in current project.

projl    - List all projects.

proj     - Show current project.
proj <p> - Set current project to <p> (if allowed).

cdx      - Show current project/directory and expected/actual real
           directory, since they can get out of sync if you mix cd and cdx.
cdx .    - Set actual real directory to expected directory (in other words,
           get them back into sync).
cdx <d>  - Set directory to <d> (if allowed).

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

echo "Possible directories are:"
cat ~/.cdx_data
    | grep "^${CDX_PROJ}:"
    | sed -e 's/^.*://' -e 's/=.*$//'
    | sort -u
    | sed 's/^/    /'

Точно так же ".cdx_projlist" шоу все возможные проекты:

echo "Possible projects are:"
cat ~/.cdx_data
    | grep ':'
    | sed 's/:.*$//'
    | sort -u
    | sed 's/^/    /'

В мясистых сценариях, ".cdx_proj" наборы и/или шоу текущий проект:

if [[ "$1" != "" ]] ; then
    grep "^$1:" ~/.cdx_data >/dev/null 2>&1
    if [[ $? != 0 ]] ; then
        echo "No project name '$1'."
        projl
    else
        export CDX_PROJ="$1"
    fi
fi
echo "Current project is: [${CDX_PROJ}]"

и ".cdx_goto" то же для каталогов в рамках проекта:

if [[ "$1" == "." ]] ; then
    CDX_TMP="${CDX_DIR}"
else
    CDX_TMP="$1"
fi
if [[ "${CDX_TMP}" != "" ]] ; then
    grep "^${CDX_PROJ}:${CDX_TMP}=" ~/.cdx_data >/dev/null 2>&1
    if [[ $? != 0 ]] ; then
            echo "No directory name '${CDX_TMP}' for project '${CDX_PROJ}'."
            cdxl
    else
            export CDX_DIR="${CDX_TMP}"
            cd $(grep "^${CDX_PROJ}:${CDX_DIR}=" ~/.cdx_data
                | sed 's/^.*=//'
                | head -1
                | sed "s:^~:$HOME:")
    fi
fi
CDX_TMP=$(grep "^${CDX_PROJ}:${CDX_DIR}=" ~/.cdx_data
    | sed 's/^.*=//'
    | head -1
    | sed "s:^~:$HOME:")
echo "Current project   is: [${CDX_PROJ}]"
echo "Current directory is: [${CDX_DIR}]"
echo "                      [${CDX_TMP}]"
echo "Actual  directory is: [${PWD}]"
unset CDX_TMP

Это использует три переменные среды, которые резервируются для его собственного использования: "CDX_PROJ", "CDX_DIR" и "CDX_TMP". Кроме тех и вышеупомянутых файлов и псевдонимов, нет никаких других используемых ресурсов. Это - самое простое, все же самое адаптируемое решение, которое я мог предложить. Всего наилучшего.

5
ответ дан 5 December 2019 в 04:28
поделиться

Создайте символьные ссылки в своем корневом каталоге (или где-то в другом месте Вашего выбора)

ln -s longDirectoryPath ~/MySymLinkName

Посмотрите man ln для получения дополнительной информации.

6
ответ дан 5 December 2019 в 04:28
поделиться

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

Как Вы упомянули, Bash имеет функцию под названием CDPATH, который входит действительно удобный здесь.

Просто сделайте скрытую папку в своем homedir (таким образом, он не создает помехи Вашему homedir слишком много):

$ mkdir ~/.paths
$ cd ~/.paths
$ ln -s /my/very/long/path/name/to/my/project project
$ ln -s /some/other/very/long/path/to/my/backups backups
$ echo 'CDPATH=~/.paths' >> ~/.bashrc
$ source ~/.bashrc

Это создает каталог в Вашем homedir, названном ".paths", который содержит символьные ссылки на все Ваши длинные места каталога, которые Вы регулярно используете, затем устанавливает переменную удара CDPATH на тот каталог (в Вашем .bashrc) и перечитывает .bashrc файл.

Теперь, можно перейти к любому из тех путей отовсюду:

$ cd project
$ cd backups

Оставляя Вас с коротким CDPATH, никакими псевдонимами создания помех, и что еще более важно: действительно простой способ перейти к тем длинным трактам из других приложений, таких как приложения UI, просто войдя ~/.paths или добавив, что каталог в Вашу боковую панель приложения UI или около этого.

Вероятно, самое легкое всестороннее решение Вы можете иметь.

33
ответ дан 5 December 2019 в 04:28
поделиться

Revisiting. Today I received this link from a social bookmarking site, then I immediately remembered this question:

Navigation with bm

We keep a simple, plain text bookmarks file and use a tool called bm to do the look-ups. The tool can also be used to edit the bookmark index dynamically as shown below where we add the directories from the previous example to the index.

4
ответ дан 5 December 2019 в 04:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: