CD, просто введя имя каталога?

Можно ли использовать ssh с командой как аргумент? Как:

ssh user@hostname /bin/sh
58
19.10.2013, 15:14
5 ответов
  • Bash: shopt -s autocd
  • Zsh: setopt autocd
  • tcsh: set implicitcd

Кроме того, 'автопереход' является полезным инструментом. После того, как установленный это помнит каталоги так, чтобы можно было ввести j abc и если Вы посетили abc прежде, скажите x/d/f/g/t/abc затем, это будет CD к там!
https://github.com/joelthelion/autojump

76
27.01.2020, 19:33
  • 1
    Да я ввел shopt -s autocd в командной строке в нем работал. Теперь я могу только начать вводить имена каталогов и использовать автоматическое заполнение и затем нажать возврат и оболочку cdв каталог. Так охладитесь! –  Michael Durrant 24.04.2012, 05:23
  • 2
    Большой. Спасибо за указание на ошибку для предотвращения. –  vonbrand 30.01.2013, 23:02
  • 3
    я не использую это - cd это не трудно ввести, и большинство механизмов заполнения клавишей Tab более умно, когда Вы даете им больше контекста. –  jw013 31.01.2013, 00:44
  • 4
    После возвращения чрезмерного восклицания оценки позвольте мне просто сказать, что autocd является действительно правильным :D –  Luc 20.05.2014, 21:49
  • 5
    autocd shopt был добавлен в версии 4 удара. Таким образом, это не доступно на macOS (который все еще имеет версию 3.x.x удара), если альтернативный, более новый удар не установлен (например, через домашнее пиво). –  Quinn Comendant 07.03.2017, 12:38

Я когда-то сделал полезный сценарий для подобной цели с функцией fcd для find-n-cd.

Вы вводите fcd foo и 3 вещи могут произойти:

  • Никакое такое нечто каталога не найдено, затем это возвращается с "no such directory " $1
  • Один файл найден: Это тестирует, является ли это каталогом (или просто файл) и если так, это CD там.
  • Несколько файлов найдены - затем, выбор представлен, где Вы просто вводите количество выбора (или специальное число для возврата).

Это подобно в этом, этому не нужны Вы для ввода целого пути, но Вы имеете, вызывают функцию явно.

#!/bin/bash
#
# find cd. For input foo, find all directories .../.../foo 
# GPLv3 Stefan Wagner (2010, 2012)
#
# doesn't handle blanks in directory names gracefully.
#
fcd () 
{
    list=$(locate $1 | egrep "/$1$")
    count=$(echo $list | wc -w )
    case $count in 
      0) 
        echo "unknown directory: "$1 && return
        # could search for partial matches Doc => Documentation
        ;;
      1) 
        if [[ -d "$list" ]]; then
        echo "$list";
        cd "$list";
        else
            echo "not a directory: $1"
        fi
        ;;
      *) 
        select directory in $list "/exit/" 
        do
          if [[ "$directory" = "/exit/" ]]; then break; fi
          if [[ -d "$directory" ]]; then
                echo "$directory";
                cd "$directory";
            break
          else
            echo "not a directory: "$1 
          fi
        done     
        ;;
   esac
}

Вы имеете к source функция (source fcd.sh| . fcd.sh) и не может назвать его как сценарий, потому что cd еще только произошел бы в контексте сценария, и после окончания Вас, окажется, сразу вернется в Вашем стартовом dir.

Так как это работает с locate, это довольно быстро в нахождении каталогов (но не всегда актуально).

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

1
27.01.2020, 19:33
  • 1
    Вопрос был к cd автоматически, не вводя команды. Этот ответ более подходит для навигации каталога Quick в терминале. –  manatwork 27.04.2012, 14:13
  • 2
    @manatwork: Ну, можно объединить команду с обработчиком ошибок удара. В /etc/bash.bashrc существует, в человечности, a function command_not_found_handle который смотрит, как будто это могло быть изменено. –  user unknown 27.04.2012, 18:42
  • 3
    Получил Вас. Этот путь звучит намного лучше. –  manatwork 27.04.2012, 19:15
  • 4
    @manatwork: Я сделал бы это сам, если я хотел бы использовать его сам. Но если я хочу изменить каталог, мне нравится использовать короткую команду, но если я ввожу что-то с опечаткой, я редко забывал к символам типа 3 или 4. Наличие этой программы вступает, было бы довольно раздражающим мне, но использование это явно прекрасно. –  user unknown 28.04.2012, 00:30

Вставьте это Ваш ~/.bashrc

  #aliases to cd into the core dirs
  PROJECT_PARENT_DIRS[0]="$HOME/repos"
  #you can make it search more dirs by assigning new indexes to your other root dirs

  for PARENT_DIR in ${PROJECT_PARENT_DIRS[@]} ; do
    if [ -d "$PARENT_DIR" ]; then
      for PROJECT_DIR in $(/bin/ls $PARENT_DIR); do
        if [ ! -z `which $PROJECT_DIR` ]; then
          continue # don't set alias if there is something already a command on the path with the same name
        fi
        if [ -d "$PARENT_DIR/$PROJECT_DIR" ]; then
          alias "$PROJECT_DIR"="cd $PARENT_DIR/$PROJECT_DIR"
        fi
      done
    fi
  done
  #end alias
0
27.01.2020, 19:33

Утилита autojump обеспечивает аналогичный механизм со списком каталогов Most Heavily Used. Однако, она требует добавления утомительного набора jSpace, но это компенсируется более частым правильным угадыванием.

Это наиболее близко к DWIM, который я использовал до сих пор.

.
2
27.01.2020, 19:33

Это также работает,

cdf name_of_file_or_directory

.. при условии, что вы настроили собственный сценарий cdf.sh (ниже), полученный из оболочки. Для каталога в качестве параметра этот сценарий получает доступ только к родительскому каталогу для найденного каталога. Добавьте следующую строку в ваш .bashrc или .zshrc, что угодно ..

source ~/bin/cdf.sh 

И добавьте этот код в файл ~ / bin / cdf.sh, который вам нужно создать с нуля.

#!/bin/bash

function cdf() {
    THEFILE=$1
    echo "cd into directory of ${THEFILE}"
    # For Mac, replace find with mdfind to get it a lot faster. And it does not need args ". -name" part.
    THEDIR=$(find . -name ${THEFILE} |head -1 |grep -Eo "/[ /._A-Za-z0-9\-]+/")
    cd ${THEDIR}
}
1
27.01.2020, 19:33

Теги

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