5

Скажем, мой pwd находится в ~/myproject/ а у меня есть файл в ~/myproject/scripts/com/example/module/run_main_script.sh

В vim с плагином ctrlp я могу нажать Ctrl+P, набрать run_main_ Enter, я редактирую этот скрипт.

Я хочу запустить этот скрипт (с некоторыми аргументами) в bash. И я не хочу вводить полный путь. Есть ли способ сделать это в Bash?

3 ответа3

1

Для этого обычно используется PATH . Хотя я бы не стал добавлять весь ваш домашний каталог в вашу PATH . Попробуйте добавить выделенный каталог (например, ~/bin), чтобы добавить к своему пути свои исполняемые файлы.

Тем не менее, вы можете добавить в ваш ~/.bashrc функцию, которая позволяет вам искать и запускать скрипт ... что-то вроде этого:

# brun stands for "blindly run"
function brun {
    # Find the desired script and store
    # store the results in an array.
    results=(
        $(find ~/ -type f -name "$1")
    )

    if [ ${#results[@]} -eq 0 ]; then   # Nothing was found
        echo "Could not find: $1"
        return 1

    elif [ ${#results[@]} -eq 1 ]; then   # Exactly one file was found
        target=${results[0]}

        echo "Found: $target"

        if [ -x  "$target" ]; then   # Check if it is executable
            # Hand over control to the target script.
            # In this case we use exec because we wanted
            # the found script anyway.
            exec "$target" ${@:2}
        else
            echo "Target is not executable!"
            return 1
        fi

    elif [ ${#results[@]} -gt 1 ]; then   # There are many!
        echo "Found multiple candidates:"
        for item in "${results[@]}"; do
            echo $item
        done
        return 1
    fi
}
1

Я тоже этого хотел.
Я написал этот маленький Perl-скрипт для этого, не стесняйтесь проверить.
Ctrl-P как скрипт командной строки (bash).

0

Не совсем то, что вы ищете, но довольно хорошо и встроено прямо в bash, который вы уже используете, это Ctrl-r http://ruslanspivak.com/2010/11/20/bash-history-reverse-intelligent-search/

Было бы хорошо, если бы он был более размытым, как ctrlp в vim. Здесь упоминаются некоторые реализации более высокого уровня. Существует ли оболочка, которая поддерживает нечеткое завершение, как в Sublime Text?

Вы можете обмануть всю вашу подсказку bash, чтобы использовать vim как readline и .inputrc http://vim.wikia.com/wiki/Use_vi_shortcuts_in_terminal

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .