ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

linux中怎么一次提交多条命令

linux中怎么一次提交多条命令 在Linux上如果你想要多条命令一起运行有几种方式可以实现但具体使用哪种方式取决于你希望这两条命令如何并行或顺序执行。1、顺序执行如果你希望第一条命令执行完毕后再执行第二条命令你可以简单地将它们写在同一行用分号;分隔。例如command1;command2这样无论command1执行成功还是失败command2都会执行。2、并行执行如果你希望多条命令同时执行互不干扰可以使用符号将第一条命令放在后台执行然后立即执行第二条命令。但请注意这实际上并不是将多个命令“拼接”在一起执行而是让第一个命令在后台运行同时立即开始执行第二个命令。例如command1command2但请注意由于只是将command1放入后台如果command1的输出很重要你可能需要重定向其输出到文件或使用其他方式捕获。3、使用和||进行条件执行仅当第一个命令成功执行即退出状态为0时才执行第二个命令。||仅当第一个命令执行失败即退出状态非0时才执行第二个命令。例如command1command2# 如果command1成功则执行command2command1||command2# 如果command1失败则执行command24、如果你在脚本里启动了后台程序可以使用wait等待后台进程#!/bin/bash# 启动一个后台进程比如sleep 5sleep5# 获取最后一个后台进程的PIDlast_pid$!# 输出这个PIDecho最后一个后台进程的PID是:$last_pid# 等待这个特定的后台进程完成wait$last_pid# 输出完成信息echo后台进程已完成5、管道上面的执行方法中不难发现少一个|单独写在这里是因为在linux中|是管道的意思也就是说严格规范的使用含义是把上一个命令的输出作为下一个命令的输入但是如果使用场景允许确实可以作为顺序执行的方法6、如果你要执行的命令完全一致从而批量执行命令可以使用 xargs 命令完成比如对所有机器发送一条命令#!/bin/bashLOCAL_FILE/path/to/local/fileREMOTE_DIR/path/to/remote/dirUSERyour_username# servers.txt 每行一个机器域名# 使用xargs并行执行scp命令-P 10指定并行度为10 -I {} 这是个固定写法用来代指拿到的数据后面的命令可以用 {} 占位符catservers.txt|xargs-P10-I{}scp-r${LOCAL_FILE}${USER}{}:${REMOTE_DIR}如果你要做的事情比较复杂需要一个代码块你可以导出一个方法get_presto_task(){localquery_id$1locallast_part${query_id##*_}localdata_position$((last_part%JOBS))curl-s$SERVER/v1/query/$query_id${OUTPUT_FILE}.${data_position}}export-fget_presto_task# xargs 命令是 sh 解析器所以要通过 bash -c 的方式显示切回 bash$ 这是个固定写法用来代指对后面的参数拆包 _ {} 这部分就是脚本参数列表 _ 是缺省写法你也可以给本次bash进程写个具体名字{} 是管道拿到的内容做第一个参数的意思cat$TMP_QUERYIDS|xargs-I{}-P$JOBSbash-cget_presto_task $ _{}多个命令同时执行时往往会另行指定 bash 对错误的处理方式也就是把下面的命令放在脚本的最上方# 定义脚本对执行中出现错误的处理方式# -e 任意命令返回非零状态时立即终止脚本# -u 引用未定义变量时直接报错退出防止空值注入# -o pipefail 管道中任一命令失败整个管道返回失败状态默认只检测最后一个命令set-euopipefail此时$?会失效因为遇到错误脚本就退出了需要使用||逻辑# 方法1|| 短路逻辑set -e 不会终止curl-s$SERVER/v1/query/$query_id${OUTPUT_FILE}.${data_position}||{echo请求失败:$query_id# 可以记录日志、跳过、重试等}或者临时告诉脚本这个命令可以失败curl-s$SERVER/v1/query/$query_id${OUTPUT_FILE}.${data_position}||true还有一种写法是将命令放在 if 中# 用 if 包裹if 条件中的命令失败不会触发 set -eif!curl-s$SERVER/v1/query/$query_id${OUTPUT_FILE}.${data_position};thenecho请求失败:$query_idfi# 简写[[!curl-s$SERVER/v1/query/$query_id${OUTPUT_FILE}.${data_position}]] echo 请求失败:$query_id
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表