期望兑现 PATH 环境变量

Getting expect to honor the PATH environment variable

我正在尝试 运行 调用自定义 tmux 实例的 expect 脚本已经添加到调用者脚本中的 PATH 变量中,但是 expect 似乎不支持此类变量。

调用脚本

#!/bin/sh

export PATH="$HOME/bin:$PATH"
expect_script

期待脚本:

#!/usr/bin/env expect
spawn tmux

send "hello world"

send: spawn id exp7 not open
while executing "send "hello world""

我正在使用以下解决方法,但想知道是否有更清洁的替代方法。

spawn $env(HOME)/bin/tmux

可以从全局数组变量env.

访问环境变量
#!/usr/bin/env expect
set ::env(PATH) "$::env(HOME)/bin:$::env(PATH)"
spawn tmux
# Further code below

但是,令我惊讶的是,如果您之前的案例中没有设置 PATH 变量,spawn 命令本身将明显失败并显示以下错误消息

spawn tmux
couldn't execute "tmux": no such file or directory
    while executing
"spawn tmux"

想知道为什么没有 PATH 变量你没有得到它,如果你在发送命令中收到错误消息,那么 spawn 可能成功并且只有当它是关于无法发送命令,导致此失败。