我经常在vi中工作,暂停vi,在cli上运行一些东西,然后fg回到vi来处理结果.例如,修复我运行cli命令时出现的错误.
但是,当我fg vi时,vi"擦除"当前的终端缓冲区,我无法在回滚缓冲区中看到终端输出的"最后屏幕".
在vi(或屏幕,我使用屏幕)中有一些设置可以帮助我吗?
我已经搜索谷歌很长一段时间没有答案.我也意识到还有其他工作流可以解决这个问题,但它们并不完美(从内部运行vi意味着没有shell完成等).
我有一个过程,它让我在屏幕上连续输出.我想在输出中通过以下Perl的正则表达式搜索CamelCase单词,以便我可以主动监视输出.
/\b([a-z]*[A-Z][a-z]*){2,}\b/
Run Code Online (Sandbox Code Playgroud) 我在mac上使用git,我已经配置了自动完成功能,如http://www.codethatmatters.com/2010/01/git-autocomplete-in-mac-os-x/所示.当我在纯粹的时候这样做很好终奌站.
但我更喜欢在终端工作时使用gnu屏幕程序.当我按Tab键时会出现屏幕.也许有人知道如何解决它.
我已经设置了这样的屏幕rc文件:
log on
shelltitle apt
logfile $HOME/configs/screen/screenlogs/apt.log
logtstamp after 120
Run Code Online (Sandbox Code Playgroud)
我是这样开始的:
screen -c ~/configs/screen/apt.rc
Run Code Online (Sandbox Code Playgroud)
但是在使用一段时间之后,apt.log文件永远不会被创建.语法看起来很完美,除非有一些我没有得到的日志文件语法
我们在办公室里经常使用gnu屏幕,有时如果我不注意,我最终会迷失到我已经进入的屏幕会话.
所以我的问题是,你怎么知道你在哪个屏幕会话?你有办法检查吗?
澄清:我需要知道的是,当我这样做时:
~$ screen -ls
Run Code Online (Sandbox Code Playgroud)
我看到类似的东西:
There is a screen on:
4732.work_Sept42012 (Attached)
3551.web01 (Attached)
5521.mysql01 (Attached)
1255.tomcat05 (Detached)
3326.oracle15 (Attached)
1 Socket in /tmp/uscreens/S-icasimpan.
Run Code Online (Sandbox Code Playgroud)
我如何知道我目前是否已连接到任何附加会话?
提前致谢.
我已经尝试将此添加到我的crontab:
@reboot/root/startup
"启动"文件:
#!/bin/sh
svnserve -d -r /root/svnrepos/mainres
svnserve -d -r /root/svnrepos/mapres --listen-port=3691
screen -S mta ./mtaserver/mta-server > log1
screen -S mapmta ./mapserver/mta-server > log2
exit 0
Run Code Online (Sandbox Code Playgroud)
现在svnserve命令运行正常.问题在于screen命令.
log1和log2文件具有相同的内容:必须连接到终端.
我要做的是在启动时启动2个可执行文件,然后再有办法访问它们.
有没有办法做到这一点?
我正在使用Debian操作系统.
我正在尝试在SSH会话下使用屏幕.但是当我试图运行命令时
screen
Run Code Online (Sandbox Code Playgroud)
shell回答我:
Must be connected to a Terminal.
Run Code Online (Sandbox Code Playgroud)
如果我进入
tty
Run Code Online (Sandbox Code Playgroud)
它回答我:
Not a tty
Run Code Online (Sandbox Code Playgroud)
我不知道为什么,我试试
ssh -t login@server
Run Code Online (Sandbox Code Playgroud)
它不起作用..
请帮帮我,我真的需要这个!
谢谢
编辑:
我读了这个主题,但它仍然无效
我试图通过ssh-ing进入我的服务器和使用屏幕打开多个会话,与我的开发服务器建立多个连接.我的问题是,当我在屏幕上运行nvm命令时,找不到命令.当我退出屏幕并在纯ssh终端中运行命令时它运行正常.我认为这是一个PATH问题.我想获得nvm的绝对路径,看看我是否可以在屏幕上运行它.
我运行下面的代码来找到路径
~$ nvm
//SHOWS USAGE INFO
~$ whereis nvm
nvm:
~$ screen
//LOADS INTO SCREEN SESSION
~$ nvm
bash: nvm: command not found
Run Code Online (Sandbox Code Playgroud)
这对于安装nvm意味着什么.如果我更改其安装目录,我可以在屏幕上运行它.如果是这种情况,那么为什么不首先屏幕运行nvm.
我每天都有几台linux服务器,每个都有一个GNU屏幕会话,以保持工作进度.
问题是我screen -Rd work每次登录时都对问题感到厌倦,反正有没有摆脱它?或者任何变通方法?
阅读@Sami的回答,我对$STYshell变量进行了一些搜索,发现了这个:
STY:备用套接字名称.如果调用了屏幕,并且设置了环境变量STY,则它仅在正在运行的屏幕会话中创建一个窗口,而不是启动新会话.
所以我认为关键是$STY变量,我们可以将它附加到.bashrc或.profile,只要它在登录时执行即可.谢谢@Sami
我正在尝试以screen另一个用户身份执行sudo.
我正在使用命令:
echo 'userpassword' | /usr/bin/sudo -u 'myuser' -S '/usr/bin/screen -ls'
Run Code Online (Sandbox Code Playgroud)
在互联网上找到的任何帮助都说明了sudo清除环境变量(比如PATH).所以我决定使用应用程序的完整路径,但我仍然得到命令not found错误.
错误:
sudo: /usr/bin/screen -ls: command not found
Run Code Online (Sandbox Code Playgroud)
Sudo安装在系统上.屏幕安装在系统上.
因为sudo,我已经尝试了-E和-H旗帜,但它没有帮助.
我试着PATH用这样的东西设置变量:
... | /usr/bin/sudo -u 'myuser' -S 'env PATH=$PATH; /usr/bin/screen -ls'
Run Code Online (Sandbox Code Playgroud)
据说$PATH假设在命令执行之前扩展但我得到了其他错误......
有人可以提供一个命令,让我可以作为另一个用户执行命令,并解释命令的每个部分的作用,以便我能理解它吗?
谢谢.