如何运行多个命令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 

任何帮助表示赞赏。

正如NickW所说的,你可以使用双和号将命令分隔成一行。

但是,你也应该理解双连字符是什么,并决定是否需要使用它或只是一个分号。

只有当前面的命令以状态0退出时,双和号才会执行下一个命令。 在下面的例子中,如果command1command2失败, command3将不会运行。

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

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

ssh user@host "command1;command2;command3"

简而言之,如果命令相互依赖,则应使用双和号;如果不相同,则应使用分号。

但是,对于这个特定的例子,你应该考虑把脚本移动/部署到目标服务器上,并通过SSH调用它,因为所有这些命令的组合都将是一个很大且难以执行的SSH命令。

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

基本上你只需要用两个&符号分开命令。

所以你会写这个:

 #!/bin/bash /usr/bin/php indexer.php --reindex catalog_product_attribute && /usr/bin/php indexer.php --reindex catalog_product_price 

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

&&是正确的做法,但是,如果你有很多任务,在视觉上是混乱的。 一个更优雅的解决scheme是沿着以下几行:

 $phppath = /usr/bin/php array = (catalog_product_attribute, ...) for item in ${array[*]} $phppath indexer.php --reindex $item` 

注意:代码是未经testing的,但在概念上是正确的。

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

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