我喜欢使用screen -d -RR 自动创建/附加到给定的屏幕。我创建了 bash 函数以使其更容易...
function mkscreen
{
local add=n
if [ "$1" == '-a' ]; then
add=y
shift;
fi
local name=$1;
shift;
local command="$*";
if [ -z "$name" -o -z "$command" ]; then
echo 'Usage: mkscreen [ -a ] name command
-a Add to .bashrc.' 1>&2;
return 1;
fi
if [ $add == y ]; then
echo "mkscreen $name $command" >> $HOME/.bashrc;
fi
alias $name="/usr/bin/screen -d -RR -S $name $command";
return 0;
}
function rmscreen
{
local delete=n
if [ "$1" == '-d' ]; then
delete=y
shift;
fi
local name=$1;
if [ -z "$name" ]; then
echo 'Usage: rmscreen [ -d ] name
-d Delete from .bashrc.' 1>&2;
return 1;
fi
if [ $delete == y ]; then
sed -i -r "/^mkscreen $name .*/d" $HOME/.bashrc;
fi
unalias $name;
return 0;
}
他们创建了/usr/bin/screen -d -RR -S $name $command 的别名。例如,我喜欢在屏幕会话中使用 irssi,所以在我的 .bashrc(在这些函数下方)中,我有:
mkscreen irc /usr/bin/irssi
然后我可以在终端输入irc 进入irssi。如果屏幕 'irc' 还不存在,则创建它并从它运行 /usr/bin/irssi(当然,它会自动连接)。如果它已经在运行,那么我只需重新附加它,强制分离已经附加到它的任何其他实例。挺好看的。
另一个例子是当我遇到 perldocs 时为它们创建临时屏幕别名:
mkscreen perlipc perldoc perlipc
perlipc # Start reading the perldoc, ^A d to detach.
...
# Later, when I'm done reading it, or at least finished
# with the alias, I remove it.
rmscreen perlipc
-a 选项(必须是第一个参数)将屏幕别名附加到 .bashrc(因此它是持久的)并 -d 将其删除(这些可能具有破坏性,因此使用风险自负)。 xD
追加:
另一个我在大量使用屏幕时发现很方便的 bash 主义:
alias sls='/usr/bin/screen -ls'
这样您就可以用更少的按键来列出您的屏幕。我不知道sls 是否与任何现有的实用程序冲突,但当时我的系统上没有,所以我选择了它。