【问题标题】:Open new gnome-terminal from scripts and input vars from present script.从脚本打开新的 gnome-terminal 并从当前脚本输入变量。
【发布时间】:2018-09-30 01:50:03
【问题描述】:
#!/bin/bash

Dpath=/home/$USER/Docker/
IP=`sed -n 1p /home/medma/.medmadoc`
DockerMachine=`sed -n 2p /home/$USER/.medmadoc`
DockerPort=`sed -n 5p /home/$USER/.medmadoc`
DockerUser=`sed -n 3p /home/$USER/.medmadoc`
DockerPass=`sed -n 4p /home/$USER/.medmadoc`

if [ ! -d $Dpath ] ; then
mkdir -p $Dpath
else 
stat=`wget -O ".dockerid" http://$IP/DOCKER-STAT.txt`
for ids in `cat .dockerid`
do
if [ "$ids" == "$DockerMachine" ] ; then
gnome-terminal -x sh -c 'sshfs -p$DockerPort $DockerUser@$IP:/var/www/html $Dpath ; bash '
nautilus $Dpath
zenity --info --text "Mounted $DockerMachine"
exit
else
:
fi
done
zenity --info --text "No Such ID:$DockerMachine"
fi

gnome-terminal -x sh -c 'sshfs -p$DockerPort $DockerUser@$IP:/var/www/html $Dpath ;重击'

此命令会打开一个新终端,但问题是它不会从该脚本加载 $DockerPort $DockerUser $IP $Dpath 之类的变量。

如何将这些变量中的值从这个脚本输入到新打开的终端?

谢谢!

【问题讨论】:

  • 将单引号改为双引号。

标签: linux bash shell terminal sh


【解决方案1】:

如前所述,您可以尝试在 sshfs 调用周围使用双引号而不是单引号。

Bash 中的单引号用于分隔逐字文本,其中不扩展变量。相比之下,双引号允许进行变量扩展和命令替换 ($(...))。

如果您使用双引号,请注意意外的副作用(您的用户名可能包含空格、美元、分号或任何其他 shell 特殊字符)。更简洁的方法是在调用 gnome-terminal 之前将变量导出到环境(并且不要忘记在变量 inside 的单引号中添加双引号),以便您的代码看起来像:

export Docker{Port,User} IP Dpath
gnome-terminal -x sh -c 'sshfs -p"$DockerPort" "$DockerUser@$IP":/var/www/html "$Dpath" ; bash'

您可能不希望只使用一次的变量污染环境。如果是这种情况,您可以使用 Bash 的 declare -p 功能在将变量加载到新环境之前对它们进行序列化,而不是 exporting(在我看来,这是最干净的方法)。这是它的样子:

set_vars="$(declare -p Docker{Port,User} IP Dpath)"
gnome-terminal -x bash -c "$set_vars;"'sshfs ....'

使用此最新方法,变量仅对运行 sshfs 命令的 shell 进程可见,gnome-terminal 本身或此后运行的任何子进程均不可见。

PS:您可以使用以下代码从 ~/.medmadoc 文件中一次读取所有变量,而不是重复 sed 调用:

for var in IP Docker{Machine,User,Pass,Port}; do 
  read $var
done < ~/.medmadoc

这段代码使用了read 内置函数,它将一行输入读入一个变量(以最简单的形式)。

PPS:stat 变量可能不会包含任何有用的信息,因为 wget 的输出被 -O 标志重定向。也许你的意思是将wget的结果代码存储到stat中,在这种情况下你的意思是:

wget -O .dockerid ...
stat=$?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-27
    • 1970-01-01
    相关资源
    最近更新 更多