KDE menus (Lancelot, Kmenu, Krunner) not respecting PATH?

Boyd Stephen Smith Jr. bss at iguanasuicide.net
Fri May 8 02:39:05 BST 2009


In <4A036DD4.5000702 at acm.org>, James Richard Tyrer wrote:
>Boyd Stephen Smith Jr. wrote:
>> In <4A034073.7000703 at acm.org>, James Richard Tyrer wrote:
>>> Boyd Stephen Smith Jr. wrote:
>>>> No, because an Xsession is not a bash login.  It is an X login.
>>> Perhaps you are being confused by the name of the user login
>>> profile script.  The reason that it is called ".bash_profile" is
>>> that the user profile script must be compatible with the shell
>>> program that will read it.  It is NOT the profile script for a Bash
>>> session, but rather the user profile script that can be executed by
>>> the Bash shell.
>>
>> No, it is *exactly* the profile script for a bash session.  It is not
>> used for a zsh login session or a sh login session or a tcsh login
>> session.  It also should not be used for an X login session.
>>
>>>>>> Sourcing .bash_profile (or .profile) is a bit dangerous, as
>>>>>> they are allowed to be fully interactive.
>>>>> If you read the fine man page for BASH, you will see that
>>>>> ".bash_profile" is the script for login.  It should not be
>>>>> interactive.
>>>> Your .bash_profile is allowed to be interactive and any system
>>>> that assumes it is not is broken.
>>> Since the ".bash_profile" script is read by a non-interactive login
>>>  shell, it should NOT be interactive.
>> Non-interactive login shells are an abomination.  I ignore them on
>> purpose.
>>
>> My experience (in a Fortune 1 company) indicates that /etc/profile
>> and similar (e.g. .bash_profile) are expected to be able to interact
>> with the user.
>Perhaps we need to define the term.  IIUC, your meaning of an
>interactive shell script is one which REQUIRES user input.  This is an
>error.  OTOH, it is OK to have a login script where user input is
>optional -- that it will run OK without any user input.

An interactive shell is one that has the ability to get user input.  IME, 
/etc/profile and ~/.*profile both expect an interactive shell and, thus, can 
be written in a way (if the admin/user desires) to require user input.

I've seen it done that way in a number of Unix/Linux shops.

>But do you understand that the purpose of ".bashrc" is to configure the
>Bash shell, NOT the system?

As is .bash_profile.  You don't understand that it was *created* to be a way 
to configure *bash* and nothing else.  Anything other than bash (or a fully-
bash-compatible shell) reading it is wrong.

>> I am also clear that environments are inherited from parent
>> processes.  I also understand that it is possible to unset parts of
>> or the whole environment.  If you want an environment variable set
>> for all interactive shells, setting it in your login script is not
>> enough.
>
>If I start a process from a console, I expect that it will inherit the
>current environment and system configuration.

It will, but that may be a environment very different from the environment you 
set up in your login script.

>> You CAN open an interactive zsh shell without having a zsh login
>> shell.
>
>Yes, but I don't see your point.  Stuff specific to the shell goes in
>the ".*rc file".

Or, in the shell-specific .*profile, if it only needs to be run when the shell 
is a login process.

>Configuration of the system (e.g. setting environment
>variables) goes in the ".*_profile" script.

No, wrong.  Environment variables (or whatever else) that goes in a .*profile 
is for that specific shell when used as a login process.

>All ".*_profile" files
>should do exactly the same thing.

Only in that they should prepare the login process the way the user wants, 
which may be quite different in a X login vs. a ssh login.

>They are just written with different
>syntax so that they can be executed by the shell being used.

No, they have different names because they are *shell-specific*.  They should 
not affect other login processes.

>> Likewise, you can have an interactive bash shell without
>> .bash_profile being read by any of its parent processes.
>
>And what difference does that make?

My point is that if you want some things set consistently in *all* interactive 
bash processes, you should set it in .bashrc.  You should not count on a 
parent process running .bash_profile.  Your zsh or tcsh or dash login process 
won't.

>The ".*_profile" script is to
>configure the system in is NOT to configure the shell.

Wrong.  It is for *shell-specific* configuration for *login* processes only.

The generic ~/.profile can be read by any sh-compatible shell, but it 
shouldn't be used for non-shell login processes.

>Unless you have a screwed system, a ".*_profile" script will have been
>executed when you logged in, the system profile script (/etc/profile)
>and a user profile script ($HOME/.*_profile) are both run at login.  It
>doesn't matter which shell the user is running at the time.

Depending on the login process, one of the .*profile scripts is generally run, 
and /etc/profile is also generally run.  However, you certainly can't count on 
a *specific* one being run (e.g. ~/.bash_profile).

A KDE login is quite a different beast of a bash login, and it, suitably, 
responds to different files.  ${KDEDIRS}/env and ${KDEDIRS}/Autostart (or 
something like that).

>>> Simple proof of why you don't want to set the environment in
>>> .bashrc:
>>>
>>> PATH=$HOME/bin:$PATH export PATH
>>
>> That just proof that you shouldn't be writing shell scripts. Here's
>> the way to add ~/bin to your path: 
>> if [ -d ~/bin ]; then
>> 	case ":${PATH}:" in
>> 	*:${HOME}/bin:*)
>> 		;;
>> 	:?*:)
>> 		PATH=~/bin:${PATH};;
>> 	*)
>> 		PATH=~/bin;;
>> 	esac
>> 	export PATH
>> fi

(Grumble, had to correct my line breaks there -- I think kmail is too generous 
with f=f.)
-- 
Boyd Stephen Smith Jr.                   ,= ,-_-. =.
bss at iguanasuicide.net                   ((_/)o o(\_))
ICQ: 514984 YM/AIM: DaTwinkDaddy         `-'(. .)`-'
http://iguanasuicide.net/                    \_/

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 197 bytes
Desc: This is a digitally signed message part.
URL: <http://mail.kde.org/pipermail/kde/attachments/20090507/1e8bb3d8/attachment.sig>
-------------- next part --------------
___________________________________________________
This message is from the kde mailing list.
Account management:  https://mail.kde.org/mailman/listinfo/kde.
Archives: http://lists.kde.org/.
More info: http://www.kde.org/faq.html.


More information about the kde mailing list