在SSH之后将变量从一个Bash脚本传递到另一个

时间:2014-08-14 15:38:02

标签: bash shell ssh

好吧,所以我是新来的bash脚本,大概整整2个小时,我正在撞墙。我需要将一些变量从一个脚本带到另一个脚本,并且似乎无法使其工作。

这很好用

script1.sh

echo "Enter your name"
read name
export name
./script2.sh

sript2.sh

echo $name

这不是

script1.sh

echo "Enter your name"
read name
export name
ssh $user@$domain "bash -s" < ./script2.sh

sript2.sh

echo $name

代码是愚蠢的,我得到了,但基本上我想要做的是将数据库变量传递给脚本2以在服务器上使用我已经进入SSH。我会在一个脚本中执行此操作,但似乎我可以获取服务器命令运行的唯一方法是在登录后调用第二个脚本,否则它在本地运行服务器命令并失败。如果这有任何不同,我会在Mac上这样做。

帮助?

** 使用更合法的代码进行更新 ****

login.sh

#!/bin/bash
echo "Enter server username:"
read user
echo "Enter server domain"
read domain
echo "Enter your password"
read password
echo "Enter database name"
read database
export database
export user
export domain
export password
ssh $user@$domain "bash -s" < ./create_files.sh 

create_files.sh

#!/bin/bash
cd public_html
tar -zcvf test.tar.gz test.html
echo "db:"$database
mysqldump -u $user -p"$password" $database > $database.sql

此处的目标是在完成此操作后使用create_files.sh中login.sh的详细信息。我还需要使用登录详细信息将创建的文件scp回本地计算机。希望这能澄清问题。

1 个答案:

答案 0 :(得分:2)

调用ssh时,它会创建一个新的shell进程,该进程不会继承您在第一个脚本中导出的新变量。相反,尝试将它们作为命令行参数添加到第二个脚本中,如下所示:

#!/bin/bash
echo "Enter server username:"
read user
echo "Enter server domain"
read domain
echo "Enter your password"
read password
echo "Enter database name"
read database
ssh $user@$domain "bash -s" < ./create_files.sh "$user" "$password" "$database"

然后将第二个脚本修改为如下所示:

#!/bin/bash
cd public_html
tar -zcvf test.tar.gz test.html
echo "db:$3"
mysqldump -u "$1" -p"$2" "$3" > "$3".sql