Псевдоним, который позволяет редактировать ~ / .bashrc, а затем автоматически «источник» – почему он не работает?

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

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

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

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

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

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

Есть идеи?

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

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

    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_wait, пока вы не увидите последнее … ИЛИ закончите соответствующие команды в вашем $PATH :

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

    На самом деле , вероятно, вы также должны удалить новые , так как они, возможно, были cp 'ed in (вы никогда не сможете быть слишком параноидальными с вашей ОС :-). Следующая команда будет жестко привязывать команды к вашему / 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) .

    Давайте будем гением компьютера.