当shell结束后执行其他的操作

Option Explicit
Private Const WAIT_INFINITE = -1&
Private Const SYNCHRONIZE = &H100000

Private Declare Function OpenProcess Lib "kernel32" _
  (ByVal dwDesiredAccess As Long, _
   ByVal bInheritHandle As Long, _
   ByVal dwProcessId As Long) As Long
   
Private Declare Function WaitForSingleObject Lib "kernel32" _
  (ByVal hHandle As Long, _
   ByVal dwMilliseconds As Long) As Long
   
Private Declare Function CloseHandle Lib "kernel32" _
  (ByVal hObject As Long) As Long   


Private Sub Command1_Click()

   Dim hProcess As Long
   Dim taskId As Long
   Dim cmdline As String
   
   cmdline = "notepad.exe"
   taskId = Shell(cmdline, vbNormalFocus)
   
   hProcess = OpenProcess(SYNCHRONIZE, True, taskId)
   Call WaitForSingleObject(hProcess, WAIT_INFINITE)
   CloseHandle hProcess
   
   MsgBox "调用的程序结束."

End Sub

 
### 如何在 Shell 脚本中调用另一个 Shell 脚本 #### 方法一:使用 `source` 或者 `.` 命令 当希望在同一 Shell 环境下运行目标脚本时,可以采用 `source` 或者 `.` (点命令),这不会创建新的子进程来执行被调用的脚本,在当前环境中直接读取并执行指定文件中的命令[^2]。 ```bash #!/bin/bash echo "这是主脚本" source ./subscript.sh # 使用 source 关键字加载 subscript.sh 文件内的所有指令到当前上下文中执行 # 或者也可以写作 . ./subscript.sh ``` 这种方法允许两个脚本之间共享变量和其他状态信息。如果修改了某些环境设置或定义了一些函数,则这些更改将在整个过程中保持有效直到结束。 #### 方法二:通过命令形式直接调用 另一种常见的方式就是像平常一样作为一条独立命令去启动另外一个程序那样简单地写出要被执行的那个 `.sh` 文件的名字即可实现调用操作;这种方式会在一个新的进程中开启新实例来进行处理工作[^1]。 ```bash #!/bin/bash echo "这是主脚本" ./another_script.sh # 执行 another_script.sh 并等待其完成后再继续往下走 ``` 需要注意的是,默认情况下此方法会阻塞父级流程直至子任务全部完成后才会返回控制权给前者。 #### 方法三:后台异步执行 对于不需要立即得到反馈的任务来说还可以考虑将其放到后台去做从而提高效率——只需加上 & 符号就可以让该动作变为非同步模式下的作业之一。 ```bash #!/bin/bash echo "这是主脚本" nohup ./background_task.sh > /dev/null 2>&1 & ``` 这里展示了如何利用 nohup 工具配合重定向技术使得即使关闭终端连接也不会影响正在运行的服务端口监听等长期活动型应用的功能表现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值