Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从终端运行Bash脚本,使用实例终端作为脚本代码的调用方?_Bash_Unix_Ssh - Fatal编程技术网

如何从终端运行Bash脚本,使用实例终端作为脚本代码的调用方?

如何从终端运行Bash脚本,使用实例终端作为脚本代码的调用方?,bash,unix,ssh,Bash,Unix,Ssh,所以这个标题可能不是很好,但我真的说不出更好的了。 基本上,为了节省我一天的时间,我编写了一个简单的脚本,将我的终端实例注册到SSH for Github,如果我关闭终端,我需要键入以下内容: eval $(ssh-agent -s) ssh-add ~/.ssh/github 所以我把它放在一个脚本中,这样我就可以从我打开的终端调用这个脚本,当然它运行在一个单独的实例中,PID是不同的 这可以解释吗?你可以或脚本 cat <<'EOF' >script.sh #!/bin/

所以这个标题可能不是很好,但我真的说不出更好的了。 基本上,为了节省我一天的时间,我编写了一个简单的脚本,将我的终端实例注册到SSH for Github,如果我关闭终端,我需要键入以下内容:

eval $(ssh-agent -s)
ssh-add ~/.ssh/github
所以我把它放在一个脚本中,这样我就可以从我打开的终端调用这个脚本,当然它运行在一个单独的实例中,PID是不同的

这可以解释吗?

你可以或
脚本

cat <<'EOF' >script.sh
#!/bin/bash
eval $(ssh-agent -s)
ssh-add ~/.ssh/github
bla bla
EOF

source script.sh # will run the script.sh as the same pid, ie. source it
. script.sh  # is the same

ssh-agent-s输出的命令必须在shell本身中运行,而不是从shell启动的脚本中运行。所以你有两个选择:

  • 脚本的源代码:
    。脚本名称
  • 设置一个shell函数,可能从
    ~/bash\u别名
    ~/.bash\u配置文件
    加载。例如:

注意,许多现代linux发行版都有一个选项(假设它不是默认的)在登录时自动运行ssh代理。检查您的分发文档。然后,您只需要运行
ssh add
命令。

您不能在
~/.ssh/config
中添加一个配置,以便在登录github时使用此特定密钥吗?或者您是否与其他人共享您的帐户?如果您不运行代理,那么我猜您必须在每次使用密钥时键入密码以解锁密钥。除非你不给它一个密码,这有点不安全。你每次登录一个新的终端时都要输入密码吗?我只是想假设,我的电脑有防火墙,我的用户有密码,没有人可以不受限制地访问我的数据,因此不需要加密我存储在我电脑上的数据。因此,将配置添加到ssh配置不是你的方法。就我个人而言,我运行一个登录范围的代理,并在第一次需要时将密钥加载到其中。我也有配置,但如果没有代理,您仍然需要键入密码。我保留备份,让未受保护的密钥四处浮动似乎是个坏主意。在多用户系统上,风险更大。
Host github.com
   IdentityFile ~/.ssh/github
gitagent(){
    eval $(ssh-agent -s)
    ssh-add ~/.ssh/github
}