在heredoc Doc中执行另一个脚本,期望在shell中输入用户

时间:2016-06-11 14:06:16

标签: bash shell sh ksh

我有一个脚本,根据用户输入我需要调用另一个由pbrun作为管理员运行的脚本,所以我创建了一个带有PS3select的菜单,并根据我调用的输入我在其中运行一个pbrun并传递一个here doc作为输入的函数。

function callS {
pbrun -l /bin/su - admin <<'INNER_EOF'
/home/ankur/testWithout.ksh
INNER_EOF
}

现在每件事都运行正常但是如果我调用一个脚本也使用PS3select来提供菜单并需要用户从命令行输入来继续我无法提供调用脚本任何输入作为提供的输入由我的脚本而不是我称之为管理员的那个

我知道如何才能实现这一目标。

PS:我无法使用expect,因为也无法安装它。无权在系统上安装。

ADMIN脚本是使用KSH shell

编写的

1 个答案:

答案 0 :(得分:0)

在我看来,你想管道输出:

/home/ankur/testWithout.ksh | pbrun -l /bin/su - admin

或使用process substitution

pbrun -l /bin/su - admin < <(/home/ankur/testWithout.ksh)

command <(...)是一个进程替换,它会在/proc/self/fd/中创建一个临时“文件”,以便...写入该临时文件的名称作为command的参数返回:

% echo <(ls)
/proc/self/fd/11

此处docs 用于文本,而<< 'xyz'输入被解释为单引号字符串,因此命令替换不起作用,也不将参数扩展

command < file会将file重定向为command的输入。