我正在尝试按照本教程设置与Github的SSH连接:https:
//help.github.com/articles/testing-your-ssh-connection/
我遇到了以下命令:
$ ssh -T git@github.com
# Attempts to ssh to github
Run Code Online (Sandbox Code Playgroud)
好奇,我看了ssh手册.它说如下:
-T Disable pseudo-tty allocation.
Run Code Online (Sandbox Code Playgroud)
什么是tty分配?tty代表什么?我们为什么要禁用它?
我认真地试着查一查,但我甚至找不到定义.
我做了一些谷歌搜索,没有运气找到一个我跑,docker run -i some_image而不是 docker run -it some_image.
如果我运行docker run -i --name sample some_image bash,容器在前台运行,但我无法从我所在的shell中与它进行交互.我甚至无法用CTRL + C来阻止它.但是,我可以弹出另一个shell并运行docker exec -it sample bash并获取对容器的访问权限.
如果我跑docker run -i -d --name sample some_image bash,容器立即退出.我可以重新启动它docker start sample然后它保持运行,所以我可以docker exec -it sample bash再次运行并与之交互.
但是,在所有这些情况下,我最终都会使用-it与容器进行交互.在哪个世界我不需要-t旗帜?
干杯
该-i标志被描述为"即使没有附加也保持STDIN打开",但Docker运行参考也说:
如果未指定-a,则Docker将附加所有标准流.
所以,默认情况下,stdin是附加的,但是没有打开?我认为STDIN连接但没有打开时没有任何意义,对吧?
说实话,我一直困惑docker exec -it …,docker exec -i …和docker exec -t …,所以我决定做一个测试:
docker exec -it …:
# docker exec -it 115c89122e72 bash
root@115c89122e72:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
Run Code Online (Sandbox Code Playgroud)
它正常工作.
docker exec -i …:
# docker exec -i 115c89122e72 bash
^C
Run Code Online (Sandbox Code Playgroud)
命令挂起,我必须使用Ctl+ c来中断它.
docker exec -t …:
# docker exec -t 115c89122e72 bash
root@115c89122e72:/# ls
^C …Run Code Online (Sandbox Code Playgroud)