Gus*_*uss 15 shell login ssh gnu-screen
我在通过 SSH 访问的远程系统上使用 screen(有问题的命名终端会话管理器)来运行长时间运行的进程等。我最终开始使用命令直接附加到 screen 会话,而不是首先通过 SSH 登录,然后启动 screen:
ssh -t hostname screen -xRR
Run Code Online (Sandbox Code Playgroud)
的用途-xRR是附加到现有的屏幕会话(如果可用),否则只需创建一个新会话。问题是,当创建新会话时,它不会被创建为登录 shell:
$ shopt -q login_shell; echo $?
1
Run Code Online (Sandbox Code Playgroud)
因此,.profile与首先使用 SSH 登录然后运行相比,登录会话设置(运行和朋友)未完成,然后部分设置丢失screen- 在这种情况下,SSH 启动的 shell 是一个登录 shell,它设置正确,屏幕我猜继承了环境。
我尝试使用-l屏幕上的标志,该标志被记录为“登录模式”,但它没有帮助 - 我认为它只会更新诸如who.
知道如何让屏幕运行登录 shell 吗?
avi*_*iro 15
来自 GNU 的手册页screen:
\n\n-s程序
\n将默认 shell 设置为指定的程序,而不是环境变量中的值
\n$SHELL(/bin/sh如果未定义则为“”)。这也可以通过“ ”shell.screenrc 命令定义。
...
\n\n\n外壳命令
\n设置用于创建新 shell 的命令。这会覆盖\n环境变量的值
\n$SHELL。如果您\xe2\x80\x99d 喜欢\n运行一个 tty 增强器,该增强器期望执行 中指定的程序\n,这非常有用$SHELL。如果命令以 \xe2\x80\x98-\xe2\x80\x99 字符开头,\nshell 将作为登录 shell 启动。当不作为登录 shell 启动时,典型的 shell 仅执行最少的\n初始化。~/.bashrc例如,除非它是登录 shell,否则Bash 不会\n读取您的信息。\n
defshell目前是 .screenrc 命令的同义词shell。
所以你有两个选择:
\n运行以下命令以确保作为bash登录 shell 启动:
ssh -t hostname screen -xRR -s -bash\nRun Code Online (Sandbox Code Playgroud)\n如果您希望此行为成为默认行为,请将以下行添加到$HOME/.screenrc目标主机(或运行screen命令的任何位置)上的文件中:
shell -bash\nRun Code Online (Sandbox Code Playgroud)\n| 归档时间: |
|
| 查看次数: |
1010 次 |
| 最近记录: |