2

Я использую MacBook Air с OSX 10.7.2.

Я хотел бы создать псевдоним, который делает следующее:

  • Открывает TextMate с помощью ~/.bashrc и позволяет мне редактировать его
  • Как только я закрою TextMate, "sources" ~/.bashrc (поэтому, если я добавлю новый псевдоним, например, он будет доступен немедленно)

Я попробовал следующее:

alias b="/usr/bin/mate -w ~/.bashrc; source ~/.bashrc"

но это не работает: когда я закрываю TextMate, оболочка не возвращается (я не вижу приглашения оболочки).

Есть идеи?

2 ответа2

0

У меня нет TextMate, но использование вашего примера с emacs работает как положено. Возможно проблема с TextMate? Не могли бы вы попробовать другой редактор?

0

Хорошо, вот несколько углов атаки:

1) Упростить. Вы пробовали команды вне псевдонима, чтобы увидеть, работает ли он?

/usr/bin/mate -w ~/.bashrc; source ~/.bashrc

Лучший тест может быть с файлом, который еще не существует:

FILE=$TMPDIR/matewaiting-$(uuidgen); /usr/bin/mate -w $FILE; ls -al $FILE

Если вы получили список файлов, он ждал. Если вы получили сообщение об ошибке, даже если вы ввели что-то в файл и сохранили его, это не так.

2) Несколько двоичных файлов в $PATH . Вы не упомянули, какую версию вы используете, мы должны проверить ...

$ mate --version
mate 2.4 (2013-11-03 revision 9495)

Если вы не получили это, а вместо этого что-то вроде mate r1577 (2012-07-11) , то в вашем $PATH есть несколько бинарных файлов mate, и вы используете старый. В этом случае, запустите следующее несколько раз и перемещайте / переименовывайте / удаляйте любые старые сообщения mate / mate_wait, пока вы, наконец, не увидите последние ...ИЛИ не хватает соответствующих команд в вашем $PATH:

for MATE in mate{,_wait}; do
    p="$(which $MATE)"
    echo "$p: $("$p" --version)"
done

На самом деле, вам, вероятно, следует удалить и новые, поскольку они могут быть cp (вы никогда не будете слишком параноиком со своей ОС :-). Следующая команда жестко свяжет команды в ваш /usr /local /bin, чтобы они автоматически обновлялись, когда / если они обновляются обновлением TextMate 2:

# This is just in case you changed the TM2 bundle name in /Applications
# Using Spotlight...might as well, since it turns every Mac into a heliport...
[[ -n "$TM2" ]] || TM2="$(mdfind '(kMDItemCFBundleIdentifier=com.macromates.TextMate.preview)')"

if [[ -n "$TM2" ]]; then
    # Search for the mate binary within the TM2 directory
    MATE="$(find "$TM2" -name mate)"
    if [[ -n "$MATE" ]]; then
        # Hard-link both mate and mate_wait to the
        # mate binary into /usr/local/bin
        for cmd in mate{,_wait}; do
            ln -f "$MATE" /usr/local/bin/$cmd
            echo "Linked /usr/local/bin/$cmd to $MATE"
        done
    else
        echo "ERROR: No mate found in $TM2"
    fi
else
    echo "ERROR: Could not find TextMate 2 app bundle in /Applications."
    echo "Please set TM2 environment variable with full path"
fi

Это, конечно, предполагает, что у вас есть /usr/local/bin и что он на самом деле находится в вашем $PATH (надеюсь, в FRONT /usr/bin и /usr/sbin)...

3) Дитч псевдоним! У меня также есть реалии, но моя - это функция (читай: лучше для чего-то большего, чем псевдоним, как определяет его словарь), и он был обработан с немного более оборонительным программированием (то есть против моего величайшего врага: меня !). Это из моего файла .aliases

# Remove all aliases
unalias -a

alias aliases='alias '

# Re-read the aliases
realias() {
    local editor="${VISUAL:-emacs}"
    if [[ -z $editor ]]; then
        echo "realias: VISUAL environment variable unset" > /dev/stderr
        return
    fi
    [[ "$editor" =~ .*mate$ ]] && editor="$editor -w "
    "$editor" $HOME/.aliases
    source $HOME/.aliases
}

$VISUAL в моем .bashrc установлен на emacs, хотя в Mac OS X он позже сбрасывается на $(which mate 2>/dev/null) .

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