如何运行多个命令 ssh bash 脚本

如何运行多个命令 ssh bash 脚本

我想使用这些命令在 ssh 中的 Bash 脚本中运行多个命令,并且希望在完成每个命令后执行每个命令。

#!/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

正如 NickW 所说,您可以使用双“&”符号将命令分隔成一行。

但是,您还应该了解双“&”符号的作用,并决定是否需要使用它或仅使用分号。

双 & 符号将执行下一个命令除非上述命令以状态零退出。在下面的示例中,如果或失败,command3则不会运行。command1command2

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

分号将执行所有命令,无论退出状态如何。在下面的示例中,所有三个命令都将运行。

ssh user@host "command1;command2;command3"

简而言之:如果命令相互依赖,则应使用双“与”号,如果不依赖,则应使用分号。

但是,有了这个特定的例子,您应该考虑将脚本移动/部署到目标服务器并通过 SSH 调用它,因为组合所有这些命令将导致一个庞大而笨重的 SSH 命令。

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

答案2

基本上,您只需用两个“与”符号分隔命令即可&&

因此你可以这样写:

#!/bin/bash

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

使用&&附加下一个命令。

答案3

&& 是正确的做法,但是,如果你有很多任务,视觉上会让人困惑。更优雅的解决方案是类似以下代码:

$phppath = /usr/bin/php

array = (catalog_product_attribute, ...)

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

注意:该代码未经测试,但概念上是正确的。

答案4

您可以使用管道将脚本的内容发送到远程系统。

尝试这样的操作:cat file | ssh remote bash

相关内容