Вот немного отличающийся путь, который работает:
setup_ssh() {
cat ~/.ssh/id_rsa.pub | ssh $1 '
mkdir .ssh;
cat >> .ssh/authorized_keys;
chmod go-w .;
chmod 700 .ssh;
chmod 600 .ssh/authorized_keys
'
}
Вы могли также избавиться от cat
и имейте канал оболочки в своем id_rsa.pub файле, но я думаю, что этого достаточно для получения Вас движение.
Править:
Путем это работает
Вы являетесь в основном начинающими новая оболочка на удаленном хосте для выполнения команд, которым Вы передали ssh
(в кавычках). Когда это добирается до cat >> .ssh/authorized_keys
часть, ничто еще не читало из STDIN, таким образом, данные из cat ~/.ssh/id_rsa.pub
все еще находится там. cat
считывает данные с STDIN, и затем мы перенаправляем это в новый authorized_keys файл. Затем мы выполняем остающиеся команды.
Emacs 24 использует LOCAL
параметр add-hook
вместо make-local-hook
. (Я полагаю, что это было добавлено в Emacs 21.1, но make-local-hook
не был удален до Emacs 24.)
Попробуйте это:
(add-hook 'emacs-lisp-mode-hook
'(lambda ()
(add-hook 'write-contents-hooks 'untab-all nil t) ))
Ваша другая проблема - это untab-all
должен возвратиться nil
указать, что это не записало буфер в диск (как объяснено в документах для write-contents-hooks
, или поскольку это теперь называют, write-contents-functions
):
(defun untab-all ()
(unless (and (stringp mode-name)
(string= mode-name "GNUmakefile") )
(untabify (point-min) (point-max)) )
nil) ; did not write buffer to disk
make-local-hook
, но Ваша настоящая проблема не имела никакого отношения к этому. – cjm 20.01.2013, 01:29