Открытие удаленного файла с помощью TextWrangler
Мое текущее решение для редактирования файлов на удаленном веб-сервере - использовать Fetch для просмотра удаленного компьютера и TextWrangler для внесения изменений. Но, поскольку мне становится удобнее перемещаться по командной строке на удаленном компьютере (но недостаточно удобно для использования VIM...), я хотел бы иметь возможность набирать что-то вроде "open filename.txt" на удаленном компьютере. и TextWrangler открыть на моей локальной машине. Я слышал термин "обратное туннелирование", но я понятия не имею, что делать дальше. Любые предложения с благодарностью - спасибо!
6 ответов
Лично я использую Cyberduck в качестве браузера S/FTP. В настройках Cyberduck вы можете определить текстовый редактор по умолчанию для редактирования удаленных файлов. Теперь я могу просто нажать Cmd+K, когда у меня выбран файл, и он откроется в TextWrangler. Всякий раз, когда я сохраняю, изменения автоматически передаются в удаленный файл.
Я действительно хотел сделать то же самое, и никто не написал это, поэтому я понял это сегодня.
Для этого есть 2 обязательные и 3 необязательные части:
- Разрешить вход через ssh на обоих компьютерах (обязательно)
- Настройте SSH-туннель от удаленного компьютера до вашего компьютера (обязательно)
- Настройте псевдоним для туннеля ssh (необязательно)
- Установите псевдоним для TextWrangler на удаленном компьютере (необязательно)
- Настройте ssh-ключи, чтобы вам не приходилось каждый раз вводить пароль (необязательно)
Для запуска команд вам нужно иметь возможность использовать ssh с локального на удаленное, а также иметь возможность использовать ssh с удаленного на локальный, чтобы он мог отправлять команды в TextWrangler.
Чтобы настроить туннель ssh, вам нужно запустить команду на вашем локальном компьютере, например:
ssh -f -N -R 10022:localhost:22 [username on remote machine]@[remote machine hostname]
Флаги -f и -N помещают ssh на задний план и оставляют вас на вашем компьютере. Флаг -R связывает порт на удаленном компьютере с портом на вашем локальном компьютере. Все, что связано с удаленным компьютером через порт 10022, будет отправлено на порт 22 на вашем локальном компьютере. Удаленный порт может быть любым, но вы должны выбрать порт> 1024, чтобы избежать конфликтов, и вам не нужно быть пользователем root. Я выбрал 10022, потому что он похож на стандартный порт ssh, равный 22. Замените скобки на ваше имя пользователя и имя машины.
Вам нужно будет выполнить это один раз после входа в систему. Чтобы упростить выполнение команды, вы можете добавить псевдоним в свой профиль bash. Добавьте следующее в ваш местный ~/.bash_profile
:
alias open-tunnel='ssh -f -N -R 10022:localhost:22 [username on remote machine]@[remote machine hostname]'
Конечно, вы можете выбрать любое псевдоним.
После настройки туннеля вы можете использовать такую команду на удаленной машине:
ssh -p 10022 [username on local machine]@localhost "edit sftp://[username on remote machine]@[remote machine hostname]//absolute/path/to/file.txt"
Флаг -p указывает использовать порт 10022 (или любой другой порт, который вы выбрали ранее). Это заставит удаленный компьютер подключиться к вашему локальному компьютеру и выполнить команду в двойных кавычках, не открывая интерактивный сеанс SSH. Команда в кавычках - это команда, которую вы запускаете на локальном компьютере, чтобы открыть удаленный файл в TextWrangler.
Чтобы упростить выполнение команды, вы можете добавить функцию в свой профиль bash. Добавьте следующее в ваш пульт ~/.bash_profile
:
function edit { if [[ ${1:0:1} = "/" ]]; then abs_path="$1"; else abs_path="`pwd`/$1"; fi; ssh -p 10022 [username on local machine]@localhost "edit sftp://[username on remote machine]@[remote machine hostname]/$abs_path"; }
Это предполагает, что на удаленном компьютере не установлены средства командной строки TextWrangler. Если вы это сделаете, вы должны назвать функцию как-то иначе, чем edit
, Например, tw
, Вот, ${1:0:1}
смотрит на первый символ первого параметра функции, который должен быть путем к файлу. Если это не начинается с /
мы вычислим абсолютный путь, добавив текущий рабочий каталог (pwd
) к началу. Теперь, если вы находитесь на удаленной машине в /home/jdoe/some/directory/
и ты бежишь edit some/other/directory/file.txt
на вашем локальном компьютере будет выполнено следующее:
edit sftp://[username on remote machine]@[remote machine hostname]//home/jdoe/some/directory/some/other/directory/file.txt
Наконец, вы должны установить ssh-ключи в обоих направлениях, чтобы не запрашивать пароль каждый раз. Вот руководство, написанное кем-то другим: http://pkeck.myweb.uga.edu/ssh/
Я не думаю, что это позволит открыть из командной строки, но
Eclipse с Remote-System-Explorer также поддерживает редактирование файлов через ssh-соединение
Я думаю, то, что вы имеете в виду, называется "пересылка X11" через ssh. Посмотрите справочную страницу ssh_config(5) для настройки (или просто используйте 'ssh' с параметром '-X'). Насколько я знаю, это работает только с программами X11 (gvim, xemacs и т. Д.), Потому что редактор на самом деле работает на хосте, к которому вы подключаетесь - на вашем локальном компьютере происходит только отображение. Так что TextWrangler не вариант, потому что это не программа X11.
Я использую Interarchy (от nolobe) для удаленного редактирования. Это довольно продвинутый клиент ftp/sftp, который дает вам представление удаленных файлов в стиле поиска и позволяет вам использовать ваш любимый редактор для работы с этими файлами.
Если вы не любите платить за такую программу, в Университете Мичигана есть программа с открытым исходным кодом под названием "Fugu", которую вы также можете использовать.
FileZilla также предлагает эту функциональность. Вы можете скачать его здесь. Подключившись к своей sftp, вы можете щелкнуть правой кнопкой мыши текстовый файл и открыть его в любом текстовом редакторе.
Минимальный ответ
Вы можете использовать Applescript. Итак, из командной строки выполните это:
osascript <<EOF
tell application "TextWrangler"
activate
open location {"sftp://myusername:@my.server:22222//home/username/.bashrc"}
end tell
EOF
Заметки
- Очевидно, что вы не захотите печатать здесь документ при каждом вызове, поэтому я бы предложил поместить эту логику в обычный скрипт оболочки:
osascript <<EOF tell application "TextWrangler" activate open location {"$1"} end tell EOF
Затем вызовите скрипт следующим образом:
sh ~/bin/textwrangler.sh "sftp://myusername:@my.server:22222//home/username/.bashrc"
- Указание пути с указанием хоста может быть утомительным каждый раз, поэтому либо жестко закодируйте его в своем скрипте, либо привяжите вызов скрипта к нажатию клавиши через вашу оболочку. Для Баш:
bind '"\et":"sh ~/bin/textwrangler.sh \"sftp://myusername:@my.server:22222/\""'
Теперь вы генерируете большую часть команды нажатиемAlt-t