Преамбула: Никогда ранее не создавал сценарий командной оболочки. Итак, и прежде всего, я даже не уверен, что это правильный инструмент для работы. Если это не так, пожалуйста, и прежде всего, дайте мне знать, что, по вашему мнению, является лучшей альтернативой.

Контекст: я часто выполняю повторяющиеся задания каждый раз, когда пытаюсь настроить веб-сайт. Я хочу автоматизировать эти задачи, выполнив одну или две команды. ОБНОВЛЕНИЕ: Общий хост основан на Unix. Локальные машины - это Mac OS X, а также Unix.

В качестве примера, вот некоторые из задач (команд), которые я часто выполняю:

SCP:

scp ~/local/path/general_web_app/.bash_profile USERNAME@HOSTNAME.com:/home/HOSTNAME/.bash_profile

scp ~/local/path/general_web_app/.gitconfig USERNAME@HOSTNAME.com:/home/HOSTNAME/.gitconfig

SSH напрямую:

ssh USERNAME@HOST.COM 
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"

AFAIK: Это разные виды задач, которые я хочу, чтобы сценарий выполнял.

Вопрос 1: Может ли bash-скрипт обрабатывать SCP, SSH напрямую и EDIT FIND REPLACE SAVE AND EXIT?

Вопрос 2: Некоторые параметры должны быть заданы пользователю, который запускает сценарий, и эти параметры должны использоваться для помещения в некоторые файлы (заменив определенные ключевые слова там, где они есть) - это можно сделать?

Вопрос 3: Должны ли мы копировать файлы на удаленный компьютер и редактировать непосредственно на удаленном компьютере, или, если мы хотим получить файлы локально, "отредактировать их локально во временном местоположении", а затем поместить их на сервер? Я предполагаю, что второе намного сложнее.

Какие-нибудь примеры, которые я могу посмотреть?

Заранее большое спасибо

1 ответ1

2

Короткий ответ: да для всех.

Я приведу несколько примеров. Ниже приведен пример команды, которая выполняет локальный сценарий 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

будет отображать все локальные переменные, которые доступны везде (технически, которые были экспортированы).

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