Bash 脚本和范围 - 我的脚本内容似乎不会影响我的文件系统?
Bash script & scope - contents of my script doesn't seem to affect my file system?
刚找到一份新工作,希望能够轻松地在我的 work/personal github 帐户之间切换。我知道有很多解决方案,但这不是我的问题(尽管欢迎任何简单易行的解决方案)。
如果我将以下内容写入我的终端,它将从代理中删除我当前所有的 SSH 密钥并避免任何冲突:
eval `ssh-agent -s`
ssh-add -D
ssh-add ~/.ssh/id_rsa_work
然后我可以 运行 ssh-add -l 它将只列出一个 RSA 密钥(我的工作密钥)。通常我在导致冲突的代理中有 4 个。但有了这个就很棒了,我可以轻松地使用我的作品 github 没有任何问题。
为了避免每天剪切和粘贴或打字,我尝试将其放入 bash 脚本中。该脚本似乎有效,它显示的消息与我直接在终端中输入的消息相同(代理 PID,并仅列出一个键等),但如果我 运行 ssh-add -l 之后,它会显示所有4 个 ssh 密钥并导致我同样的冲突。
那是为什么呢? bash 脚本不会影响它以外的文件吗?是否存在某种我不知道的范围问题或权限?这是我的脚本:
#!/bin/bash
eval `ssh-agent -s`
ssh-add -D
ssh-add ~/.ssh/id_rsa_work
在不影响当前 shell 的子shell 中调用脚本。调用脚本,使其在您当前的 shell:
中运行
. my_ssh_script.sh
刚找到一份新工作,希望能够轻松地在我的 work/personal github 帐户之间切换。我知道有很多解决方案,但这不是我的问题(尽管欢迎任何简单易行的解决方案)。
如果我将以下内容写入我的终端,它将从代理中删除我当前所有的 SSH 密钥并避免任何冲突:
eval `ssh-agent -s`
ssh-add -D
ssh-add ~/.ssh/id_rsa_work
然后我可以 运行 ssh-add -l 它将只列出一个 RSA 密钥(我的工作密钥)。通常我在导致冲突的代理中有 4 个。但有了这个就很棒了,我可以轻松地使用我的作品 github 没有任何问题。
为了避免每天剪切和粘贴或打字,我尝试将其放入 bash 脚本中。该脚本似乎有效,它显示的消息与我直接在终端中输入的消息相同(代理 PID,并仅列出一个键等),但如果我 运行 ssh-add -l 之后,它会显示所有4 个 ssh 密钥并导致我同样的冲突。
那是为什么呢? bash 脚本不会影响它以外的文件吗?是否存在某种我不知道的范围问题或权限?这是我的脚本:
#!/bin/bash
eval `ssh-agent -s`
ssh-add -D
ssh-add ~/.ssh/id_rsa_work
在不影响当前 shell 的子shell 中调用脚本。调用脚本,使其在您当前的 shell:
中运行. my_ssh_script.sh