我想使用这些命令在 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
则不会运行。command1
command2
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