Open new konsole from script, executing command and becoming interactive on conclusion
Thanks to @n.st's comments I have made this one liner:
konsole -e /bin/bash --rcfile <(echo "cd /;ls;echo hi | less")
Which is just a shorter version without tmpfiles, using bash process substitution for the following;
echo "cd /;ls;echo hi | less" > /tmp/konsolebash;konsole -e /bin/bash --rcfile /tmp/konsolebash
Which will run some commands, have them display, change the environment, run a long running program (less
) and when it ends (:q
) will be interactive.
So replace cd /;ls;echo hi | less
(the demonstration) with your script.
No history but at least you're in the correct directory now and have any environment variables you may have wanted set up.
Basically the same as my prior attempt;
konsole -e "echo ls > /tmp/konsolebash;/bin/bash -i --rcfile /tmp/konsolebash"
except the file write is outside the konsole
execution, I've dropped the -i
flag and the execution parameters are not in one quote block
Unfortunately the --rcfile
switch causes your ~/.bashrc
not to be loaded for those commands, so if you needed an alias or something you'll have to do this;
cat ~/.bashrc > /tmp/konsolebash; echo "commands" >> /tmp/konsolebash;konsole -e /bin/bash --rcfile /tmp/konsolebash
Which just copies your bashrc then appends your commands to the end of it
Related videos on Youtube
Hashbrown
Updated on September 18, 2022Comments
-
Hashbrown almost 2 years
I want to be able to get a script (ran at startup) to open up a
konsole
terminal.
When it opens it is to do some persistent things (like change directory and source bashrc) and run a long running program.
If the program crashes or I come in and<ctrl+c>
it, it is to start accepting commands from standard input (like 'up-enter' to try again, as if it was interactive the whole time).I have tried so many things to get it working (I'm currently just trying to get it to
ls
and revert to interactive on completion);konsole -e ls konsole --hold ls konsole -e /bin/bash -c ls konsole --hold -e "/bin/bash -c ls" konsole -e "/bin/bash -i -c ls" konsole -e /bin/bash -i -c ls konsole -e "echo ls > /tmp/konsolebash;/bin/bash -i --rcfile /tmp/konsolebash" echo ls > /tmp/konsolebash konsole -e "/bin/bash -i --rcfile /tmp/konsolebash"
Is it to do with the quotes? Should I not be using them, should I be escaping something?
Am I even meant to try and executebash
?
I'm running out of ideas but I hope it's even achievable (but hopefully not something embarrassingly simple that I missed).I'll upvote answers that successfully use other terminal emulators if
konsole
in particular is the problem (but since the question is specifically aboutkonsole
I don't think I can give you the juicy tick)-
n.st over 10 yearsThe last two lines look promising. Have you tried them without escaping the quotes around
source ... ls
? -
Hashbrown over 10 yearssorry that was a copy paste error from writing the question
-
n.st over 10 yearsAnd that didn't work? Strange... What exactly did it do?
-
Hashbrown over 10 yearsyeah it just brings up a normal interactive shell (no command is visibly ran, just prompt is displayed). It seems to either accept arguments, or be interactive, never both.
-
n.st over 10 yearsIf nothing else works, you could use
konsole -e "bash -c 'ls'; bash"
-- which is really ugly, but should leave you with an interactive shell whenls
terminates. -
Hashbrown over 10 yearsbut that would forget any
cd
and command history (breakup-enter
). Might as well not not make it interactive and open two shells -
n.st over 10 yearsSince we're already doing ugly things:
ls; echo 'ls' >> $HOME/.bash_history; bash
-
n.st over 10 yearsI still think however that using
--rcfile
should have done exactly what you need... Edit: In fact, I just checked andbash --rcfile /tmp/foo
does work for me, whilebash
refuses to start with-i --rcfile /tmp/foo
. So try omitting the-i
and see if that helps. -
n.st over 10 yearsSorry, I overlooked that commands in the rcfile are not added to the history, so
--rcfile
is useless for your application. Looks like we'll need theecho 'ls' >> .bash_history
hack after all... -
n.st over 10 yearsAnd here's yet another idea, suggested by ZyX in a comment on this answer: invoke a
screen
session, then have it runls
in the newly created session. -
Hashbrown over 10 yearsthanks for all this, I didn't know it'd be this hard. The comment I upvoted worked (without history though). Even if a
cd
is in the file. You should make an answer so I can upvote it/so others can see it and get help from it too
-
-
n.st over 10 yearsThere is no need to copy your bashrc, just use
source ~/.bashrc
. -
Hashbrown over 10 yearsI actually tried that, it doesn't work for the rest of the commands in the list. I.e if
.bashrc
has aliasBOB
, the argumentsource ~/.bashrc;BOB;cd /
will haveBOB
fail. I have no idea why, but this works