Преамбула: Никогда раньше не создавал скрипт оболочки bash. Так что, во-первых, я даже не уверен, что это правильный инструмент для работы. Если нет, пожалуйста, прежде всего, дайте мне знать, что, по вашему мнению, является лучшей альтернативой.
Контекст: Я часто выполняю повторяющиеся задачи каждый раз, когда пытаюсь настроить веб-сайт. Я хочу автоматизировать эти задачи, запустив одну или две команды. ОБНОВЛЕНИЕ: Общий хост основан на Unix. Локальные машины — Mac OS X, поэтому также основаны на Unix.
В качестве примера приведу некоторые задания (команды), которые я часто выполняю:
SCP:
scp ~/local/path/general_web_app/.bash_profile [email protected]:/home/HOSTNAME/.bash_profile
scp ~/local/path/general_web_app/.gitconfig [email protected]:/home/HOSTNAME/.gitconfig
SSH напрямую:
ssh [email protected]
cd /www/www/
git init
git add .
git commit -a -m "first commit"
cd ~/private/ && mkdir repos
ИЗМЕНИТЬ, НАЙТИ, ЗАМЕНИТЬ СОХРАНИТЬ И ВЫЙТИ:
pico ~/remote/private/repos/general_hub.git/hooks/post-update
replace "user" WITH "hostname";
hit "cmd x"
hit "y"
Насколько мне известно: Это разные задачи, которые я хочу, чтобы выполнял сценарий.
Вопрос 1: Может ли скрипт bash напрямую обрабатывать SCP, SSH и команды EDIT FIND REPLACE SAVE AND EXIT?
Вопрос 2: Некоторые параметры должны быть запрошены у пользователя, который запускает скрипт, и эти параметры должны быть помещены в некоторые файлы (заменив определенные ключевые слова, которые там существуют) — можно ли это сделать?
Вопрос 3: Должны ли мы копировать файлы на удаленный компьютер и редактировать их прямо на удаленном компьютере или же нам следует захватить файлы локально, «редактировать их локально во временном месте», а затем разместить их на сервере? Я предполагаю, что второй вариант гораздо сложнее.
Есть ли примеры, на которые я мог бы обратить внимание?
Заранее большое спасибо
решение1
Короткий ответ: да, на все.
Я приведу вам несколько примеров. Ниже приведен пример команды, которая выполняет локальный скрипт bash на удаленной машине: обратите внимание, что нет необходимости копировать его удаленно:
ssh user@remote_pc 'bash -s' < local_file.sh
Это настолько просто, что, возможно, не стоит писать целый скрипт для его обработки, но если вы хотите сделать это, это можно организовать с помощью скрипта. Однако, чтобы это работало, вам придется настроить passwordless login
ssh-соединения. Если вы этого не сделаете, команды ssh/scp в скрипте остановятся, ожидая ввода пароля удаленного пользователя.
Что касается редактирования и т. д., в Unix есть главный потоковый редактор sed
, который делает именно это: например, команда
sed 's/a/A/g' old_file.txt > new_file.txt
заменяет строчные буквы a
на заглавные A
и помещает вывод в новый файл. Это тоже можно легко заскриптовать.
Что касается параметров, скрипт оболочки может считывать параметры из файла, или они могут запрашивать окружение для некоторых параметров. Нет необходимости спрашивать у пользователя его имя входа,
echo $USER
whoami
сделает это, даже из скрипта. То же самое для домашнего адреса, echo $HOME
и так далее.
Что касается вашего третьего вопроса, надеюсь, мой первый ответ дал ответ и на него: первая команда позволяет выполнить файл скрипта, который вы отредактировали локально, на удаленном сервере, даже не копируя его туда.
Добро пожаловать в мир *Nix, гдеВаше желание для меня закон.
Извините, я забыл: эта команда
export -p | more
отобразит все локальные переменные, которые доступны везде (технически, которые были экспортировано).