LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Slackware (https://www.linuxquestions.org/questions/slackware-14/)
-   -   aliases Lost When Using screen (https://www.linuxquestions.org/questions/slackware-14/aliases-lost-when-using-screen-723624/)

MQMan 05-04-2009 01:12 PM

aliases Lost When Using screen
 
Not sure if this is Slack related or not, but I thought I'd post here first.

The "vanilla" Slack 12.2 I'm using sets up 3 or 4 aliases when I log on, particularly the one to colourise ls.

When I start a "screen" session, it appears that my current profile is used by screen, with the exception of TERM=, which I think is normal.

However, all the aliases that are currently set, are gone. Is this normal.

Cheers.

rg3 05-04-2009 01:43 PM

Yes. Aliases are particular to a given shell instance. They are not inherited when you launch a subshell. Screen launches a new shell and, probably not being a login shell, it doesn't have any of those aliases as the files that create them are not read when the shell is launched. Add a line like this one to your ~/.screenrc:

Code:

shell -$SHELL

MQMan 05-04-2009 02:11 PM

Quote:

Originally Posted by rg3 (Post 3529869)
as the files that create them are not read when the shell is launched

True, because my "fortunes" aren't printed either.

Everything else that is set up by /etc/profile is in place though, which I'm guessing is because it's inherited from the "launching" shell. So, why not aliases as well.

BTW, that command made no difference, nor did -${SHELL}. I still don't have the aliases in screen.

Cheers.

rg3 05-04-2009 02:48 PM

Does "shell -/bin/bash" make any difference?

MQMan 05-04-2009 03:51 PM

Nope.

Cheers.

Andy Alt 05-23-2009 09:53 PM

aliases lost when using screen, not sourcing profile
 
Like the user who started this thread, I'm using Slackware 12.2 and have the same problem when I run screen. I have tried specifying the path to bash, as suggested above.

I've also tried specifying /bin/bash at the command line with the -s option (screen -s /bin/bash).

Once I'm in screen, I can add aliases to the environment from the command line, or manually source /etc/profile and that will give me my aliases.

I was reading on a blog at http://www.lornajane.net/posts/2008/Screen-for-Linux and it's mentioned that the shell command command works for her to give her aliases. And I have a friend who started up screen for me on his distro of PCLinuxOS, aliases included there too.

As for one more person this isn't working for, another web page ( http://www.linux-archive.org/centos/...ng-bashrc.html ) where someone says screen isn't sourcing his ~/.bashrc file, apparently a CentOS user. Part of the reply to him states:
Quote:

Screen opens a "login shell", which means it will only read
.bash_profile and not .bashrc.
I have made sure that I have an alias specified in my ~/.bash_profile (most are define in /etc/profile) but still this doesn't work.

This is what my ~/.screenrc file looks like. It's almost a duplicate of the default one when installing screen on Slackware. I've not made any changes, and the only additions I've made are the last two lines.

Code:

#
# This is an example for the global screenrc file.
# You may want to install this file as /etc/screenrc.
# Check config.h for the exact location.
#
# Flaws of termcap and standard settings are done here.
#

#startup_message off

#defflow on # will force screen to process ^S/^Q

deflogin on
#autodetach off

vbell on
vbell_msg "  Wuff  ----  Wuff!!  "

# all termcap entries are now duplicated as terminfo entries.
# only difference should be the slightly modified syntax, and check for
# terminfo entries, that are already corected in the database.
#
# G0        we have a SEMI-GRAPHICS-CHARACTER-MODE
# WS        this sequence resizes our window.
# cs    this sequence changes the scrollregion
# hs@        we have no hardware statusline. screen will only believe that
#      there is a hardware status line if hs,ts,fs,ds are all set.
# ts    to statusline
# fs    from statusline
# ds    delete statusline
# al    add one line
# AL    add multiple lines
# dl    delete one line
# DL    delete multiple lines
# ic    insert one char (space)
# IC    insert multiple chars
# nx    terminal uses xon/xoff

termcap  facit|vt100|xterm LP:G0
terminfo facit|vt100|xterm LP:G0

#the vt100 description does not mention "dl". *sigh*
termcap  vt100 dl=5\E[M
terminfo vt100 dl=5\E[M

#facit's "al" / "dl"  are buggy if the current / last line
#contain attributes...
termcap  facit al=\E[L\E[K:AL@:dl@:DL@:cs=\E[%i%d;%dr:ic@
terminfo facit al=\E[L\E[K:AL@:dl@:DL@:cs=\E[%i%p1%d;%p2%dr:ic@

#make sun termcap/info better
termcap  sun 'up=^K:AL=\E[%dL:DL=\E[%dM:UP=\E[%dA:DO=\E[%dB:LE=\E[%dD:RI=\E[%dC:IC=\E[%d@:WS=1000\E[8;%d;%dt'
terminfo sun 'up=^K:AL=\E[%p1%dL:DL=\E[%p1%dM:UP=\E[%p1%dA:DO=\E[%p1%dB:LE=\E[%p1%dD:RI=\E[%p1%dC:IC=\E[%p1%d@:WS=\E[8;%p1%d;%p2%dt$<1000>'

#xterm understands both im/ic and doesn't have a status line.
#Note: Do not specify im and ic in the real termcap/info file as
#some programs (e.g. vi) will (no,no, may (jw)) not work anymore.
termcap  xterm|fptwist hs@:cs=\E[%i%d;%dr:im=\E[4h:ei=\E[4l
terminfo xterm|fptwist hs@:cs=\E[%i%p1%d;%p2%dr:im=\E[4h:ei=\E[4l

# Long time I had this in my private screenrc file. But many people
# seem to want it (jw):
# we do not want the width to change to 80 characters on startup:
# on suns, /etc/termcap has :is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l:
termcap xterm 'is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l'
terminfo xterm 'is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l'

#
# Do not use xterms alternate window buffer.
# This one would not add lines to the scrollback buffer.
#termcap xterm|xterms|xs ti=\E7\E[?47l
#terminfo xterm|xterms|xs ti=\E7\E[?47l

#make hp700 termcap/info better
termcap  hp700 'Z0=\E[?3h:Z1=\E[?3l:hs:ts=\E[62"p\E[0$~\E[2$~\E[1$}:fs=\E[0}\E[61"p:ds=\E[62"p\E[1$~\E[61"p:ic@'
terminfo hp700 'Z0=\E[?3h:Z1=\E[?3l:hs:ts=\E[62"p\E[0$~\E[2$~\E[1$}:fs=\E[0}\E[61"p:ds=\E[62"p\E[1$~\E[61"p:ic@'

#wyse-75-42 must have defflow control (xo = "terminal uses xon/xoff")
#(nowadays: nx = padding doesn't work, have to use xon/off)
#essential to have it here, as this is a slow terminal.
termcap wy75-42 nx:xo:Z0=\E[?3h\E[31h:Z1=\E[?3l\E[31h
terminfo wy75-42 nx:xo:Z0=\E[?3h\E[31h:Z1=\E[?3l\E[31h

#remove some stupid / dangerous key bindings
bind ^k
#bind L
bind ^\
#make them better
bind \\ quit
bind K kill
bind I login on
bind O login off
bind } history

shell -$SHELL
hardstatus alwayslastline "%w"


Andy Alt 06-26-2009 02:01 PM

What I find extremely odd about this is that most of the aliases I've defined are in /etc/profile.d/custom.sh, a file which is definitely getting read when I invoke a screen session. I know this because the custom environmental variables I've defined in custom.sh are set into my screen session when screen is invoked.

And then once I'm in the screen session, executing 'source /etc/profile' will do what it's supposed to do: read in /etc/profile and then whatever's in /etc/profile.d/. At that point, my aliases which are in custom.sh finally are added to my screen session environment.

So essentially, it seems the aliases are ignored the first time but not the second time, for no apparent reason.

Here's an excerpt from custom.sh:
Code:

alias cls="clear"
# alias rm="rm -i"
alias cp="cp -i"
alias mv="mv -i"
#alias pgrep="pgrep -l"
export VISUAL="/usr/bin/nano"
#alias netstat="netstat --numeric-hosts"
#export PATH="$add_root/bin:${PATH}"
export PATH="${PATH}:/usr/local/sbin"
export LS_OPTIONS="$LS_OPTIONS -lh"
export VVV=/var/log/packages


rg3 06-26-2009 02:32 PM

I find it very weird that it fails for you. I start screen normally using /usr/bin/screen -A -D -R. I don't have a .bashrc or .bash_profile files. I do have a $HOME/.profile file that sets up some environment variables and custom aliases, but it doesn't re-source /etc/profile or anything similar. My $HOME/.screenrc is copied below. Even though /etc/profile is not re-sourced from my shell startup files, I do get the system aliases in my shell session inside screen. For example, the alias

Code:

alias dir='/bin/ls $LS_OPTIONS --format=vertical'
is present.

Code:

#
# Example of a user's .screenrc file
#

# This is how one can set a reattach password:
# password ODSJQf.4IJN7E    # "1234"

#term "xterm"
defutf8 on

# no annoying audible bell, please
vbell on

# detach on hangup
autodetach on

# don't display the copyright page
startup_message off

# emulate .logout message
pow_detach_msg "Screen session of \$LOGNAME \$:cr:\$:nl:ended."

# advertise hardstatus support to $TERMCAP
# termcapinfo  * '' 'hs:ts=\E_:fs=\E\\:ds=\E_\E\\'

# make the shell in every window a login shell
shell -$SHELL

# autoaka testing
# shellaka '> |tcsh'
# shellaka '$ |sh'

# set every new windows hardstatus line to somenthing descriptive
# defhstatus "screen: ^En (^Et)"

defscrollback 1024

# don't kill window after the process died
# zombie "^["

# enable support for the "alternate screen" capability in all windows
# altscreen on

################
#
# xterm tweaks
#

#xterm understands both im/ic and doesn't have a status line.
#Note: Do not specify im and ic in the real termcap/info file as
#some programs (e.g. vi) will not work anymore.
termcap  xterm hs@:cs=\E[%i%d;%dr:im=\E[4h:ei=\E[4l
terminfo xterm hs@:cs=\E[%i%p1%d;%p2%dr:im=\E[4h:ei=\E[4l

#80/132 column switching must be enabled for ^AW to work
#change init sequence to not switch width
termcapinfo  xterm Z0=\E[?3h:Z1=\E[?3l:is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l

# Make the output buffer large for (fast) xterms.
#termcapinfo xterm* OL=10000
termcapinfo xterm* OL=100

# tell screen that xterm can switch to dark background and has function
# keys.
termcapinfo xterm 'VR=\E[?5h:VN=\E[?5l'
termcapinfo xterm 'k1=\E[11~:k2=\E[12~:k3=\E[13~:k4=\E[14~'
termcapinfo xterm 'kh=\EOH:kI=\E[2~:kD=\E[3~:kH=\EOF:kP=\E[5~:kN=\E[6~'

# special xterm hardstatus: use the window title.
termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'

#terminfo xterm 'vb=\E[?5h$<200/>\E[?5l'
termcapinfo xterm 'vi=\E[?25l:ve=\E[34h\E[?25h:vs=\E[34l'

# emulate part of the 'K' charset
termcapinfo  xterm 'XC=K%,%\E(B,[\304,\\\\\326,]\334,{\344,|\366,}\374,~\337'

# xterm-52 tweaks:
# - uses background color for delete operations
termcapinfo xterm* be

################
#
# wyse terminals
#

#wyse-75-42 must have flow control (xo = "terminal uses xon/xoff")
#essential to have it here, as this is a slow terminal.
termcapinfo wy75-42 xo:hs@

# New termcap sequences for cursor application mode.
termcapinfo wy* CS=\E[?1h:CE=\E[?1l:vi=\E[?25l:ve=\E[?25h:VR=\E[?5h:VN=\E[?5l:cb=\E[1K:CD=\E[1J

################
#
# other terminals
#

# make hp700 termcap/info better
termcapinfo  hp700 'Z0=\E[?3h:Z1=\E[?3l:hs:ts=\E[62"p\E[0$~\E[2$~\E[1$}:fs=\E[0}\E[61"p:ds=\E[62"p\E[1$~\E[61"p:ic@'

# Extend the vt100 desciption by some sequences.
termcap  vt100* ms:AL=\E[%dL:DL=\E[%dM:UP=\E[%dA:DO=\E[%dB:LE=\E[%dD:RI=\E[%dC
terminfo vt100* ms:AL=\E[%p1%dL:DL=\E[%p1%dM:UP=\E[%p1%dA:DO=\E[%p1%dB:LE=\E[%p1%dD:RI=\E[%p1%dC
termcapinfo linux C8
# old rxvt versions also need this
# termcapinfo rxvt C8


################
#
# keybindings
#

#remove some stupid / dangerous key bindings
bind k
bind ^k
bind .
bind ^\
bind \\
bind ^h
bind h
#make them better
bind 'K' kill
bind 'I' login on
bind 'O' login off
bind '}' history

# Yet another hack:
# Prepend/append register [/] to the paste if ^a^] is pressed.
# This lets me have autoindent mode in vi.
register [ "\033:se noai\015a"
register ] "\033:se ai\015a"
bind ^] paste [.]

################
#
# default windows
#

# screen -t local 0
# screen -t mail 1 mutt
# screen -t 40 2 rlogin server

# caption always "%3n %t%? @%u%?%? [%h]%?%=%c"
# hardstatus alwaysignore
# hardstatus alwayslastline "%Lw"

# bind = resize =
# bind + resize +1
# bind - resize -1
# bind _ resize max
#
# defnonblock 1
# blankerprg rain -d 100
# idle 30 blanker


Andy Alt 06-27-2009 03:57 PM

Quote:

Originally Posted by rg3 (Post 3587425)
Even though /etc/profile is not re-sourced from my shell startup files,

I suppose I only assumed that was happening. You're saying that a user's current environmental vars are exported into his screen session automatically?

Using your command line options and a copy of your screenrc (into ~/.screenrc, and after creating the symlink ~/.profile -> ~/.bash_profile, I get the same result. No aliases, unless I source /etc/profile after I'm in screen. Of course that only applies it to my current screen window.

Are you using Slackware? The user who started this post is a Slackware user, and I am.

rg3 06-28-2009 04:19 AM

Yes, I've been running slackware-current for years, and it has always worked for me.

Fragsworth 04-18-2011 05:25 PM

I had this problem too, what fixed it for me was adding the "shell -$SHELL" line.

Naturally you might just try to append this to the file. This won't work, however, if you create screens inside the .screenrc file. It must be added BEFORE any screens are created in the .screenrc file:

Code:

shell -$SHELL

# Create 3 screens on startup
screen -t sh1 0
screen -t sh2 1
screen -t sh3 2



All times are GMT -5. The time now is 10:05 AM.