我想用这个命令在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退出时,双和号才会执行下一个命令。 在下面的例子中,如果command1或command2失败, 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