Как запустить несколько команд ssh bash script [closed]

Я хочу запускать несколько команд в сценарии Bash в ssh с помощью этих команд, и я хотел бы выполнять каждую команду после завершения каждой .

#!/bin/bash

/usr/bin/php indexer.php --reindex catalog_product_attribute
/usr/bin/php indexer.php --reindex catalog_product_price
/usr/bin/php indexer.php --reindex catalog_url
/usr/bin/php indexer.php --reindex catalog_product_flat
/usr/bin/php indexer.php --reindex catalog_category_flat
/usr/bin/php indexer.php --reindex catalog_category_product
/usr/bin/php indexer.php --reindex catalogsearch_fulltext
/usr/bin/php indexer.php --reindex cataloginventory_stock
/usr/bin/php indexer.php --reindex tag_summary

Любая помощь приветствуется.

1
задан 27 February 2014 в 17:42
4 ответа

По сути, вам просто нужно разделить команды двумя амперсандами && .

Итак, вы должны написать следующее:

#!/bin/bash

/usr/bin/php indexer.php --reindex catalog_product_attribute && /usr/bin/php indexer.php --reindex catalog_product_price

Используя && чтобы добавить следующую команду.

0
ответ дан 3 December 2019 в 18:47

&& - правильный способ сделать это, однако, если у вас много задач, визуально это сбивает с толку. Более элегантное решение - это что-то вроде следующих строк:

$phppath = /usr/bin/php

array = (catalog_product_attribute, ...)

for item in ${array[*]}
    $phppath indexer.php --reindex $item`

ПРИМЕЧАНИЕ: код не тестировался, но концептуально верен.

0
ответ дан 3 December 2019 в 18:47

Вы можете использовать каналы для отправки содержимого скрипта в удаленную систему.

Попробуйте что-то вроде этого: cat file | ssh remote bash

0
ответ дан 3 December 2019 в 18:47

Как сказал NickW, вы можете использовать двойные амперсанды для разделения команд в одну строку.

Однако вы также должны понимать, что делает двойной амперсанд, и решать, нужно ли вам используйте его или просто точку с запятой.

Двойные амперсанды выполнят следующую команду , только если предыдущая команда завершится с нулевым статусом. В приведенном ниже примере command3 не будет запущен, если command1 или command2 завершится неудачно.

ssh user @ host "command1 && command2 && command3"

Точки с запятой будут выполнять все команды независимо от статуса выхода. В приведенном ниже примере будут выполнены все три команды.

ssh user @ host"command1; command2; command3"

Вкратце: если команды зависят друг от друга, следует использовать двойные амперсанды, в противном случае следует использовать точку с запятой.

Однако в этом конкретном примере вы следует рассмотреть возможность переноса / развертывания сценария на целевой сервер и его вызова через SSH, поскольку объединение всех этих команд приведет к большой и громоздкой команде SSH.

ssh user @ host "/path/to/script.sh"

3
ответ дан 3 December 2019 в 18:47

Теги

Похожие вопросы