传递命令行参数以期望命令

时间:2019-11-29 11:45:07

标签: linux bash shell expect

我正在尝试编写一个bash脚本,它将用户名作为命令行参数。它应该使用提供的用户名登录系统并执行命令。

expect -c 'spawn su - other_user_name -c my_bash_command; expect "Password :"; send my_password\n; interact'

如果我提供所需的变量,则应为:

expect -c 'spawn su - $1 -c ps ax | grep java | cut -f2 -d " " - | xargs kill -9; expect "Password :"; send Temp/123\n; interact'

其中$1是传递的用户名,ps ax | grep java | cut -f2 -d " " - | xargs kill -9是该用户执行的命令。如果我传递参数,它说没有这样的变量。如果我在脚本的顶部写了#!/usr/bin/expect,则它不起作用。我需要修复它。

1 个答案:

答案 0 :(得分:0)

解决pynexj的有效问题,并通过环境传递期望的用户名(并添加换行符以提高可读性):

env user="other_user_name" expect -c '
    spawn sh -c "su - $env(user) -c ps ax | grep java | cut -f2 -d \" \" - | xargs kill -9"
    expect "Password :"
    send Temp/123\n
    interact
'