gpt4 book ai didi

linux - 如何调用在执行期间传递给另一个 bash 脚本的变量?

转载 作者:太空宇宙 更新时间:2023-11-04 10:04:31 29 4
gpt4 key购买 nike

Bash 脚本 1:

询问用户名和主机名并存储到另一个变量。

#!/bin/bash

echo "Please enter hostname:"
read hostname

echo -n "Enter the username"
read username

echo -n "enter the password:"
read -s password

: '(我想在 ssh 之前使用 spawn 命令,因此,我编写了另一个脚本,将 expect 作为解释器。我想将用户输入的详细信息传递给脚本 2)'
Bash 脚本 2:

#!/bin/expect

spawn ssh -o StrictHostKeyChecking=no $username\@$hostname

expect {
timeout
{ send_user "\nTimeout Exceeded - Check Host\n"; exit 1 }
eof
{ send_user "\nSSH Connection To $hostname Failed\n"; exit 1 }
incorrect
{send_user "invalid password or account\n"; exit 1}

"*assword:"
{ send "$password\n" }
expect "$"
interact
}

: '(但是,如何将脚本 1 在运行时询问的信息调用到脚本 2?)'

最佳答案

您的 bash 脚本将像这样调用 expect 脚本:

expect script.exp "$username" "$password" "$hostname"

expect 脚本将像这样开始:

#!/bin/expect

lassign $argv username password hostname

# or if your version of expect is old and does not have "lassign"
# foreach {username password hostname} $argv break

# or, if you prefer
# set username [lindex $argv 0]
# set password [lindex $argv 1]
# set hostname [lindex $argv 2]

spawn ssh -o StrictHostKeyChecking=no $username@$hostname
# etc etc

@ 字符没有特殊含义,因此不需要转义。


上述方法存在安全风险:当期望代码运行时,ps 输出将显示密码。

您可以通过环境共享密码:

庆典

export username password hostname
expect script.exp

期待

spawn ssh -o StrictHostKeyChecking=no $env(username)@$env(hostname)
# etc etc

关于linux - 如何调用在执行期间传递给另一个 bash 脚本的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53538806/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com