Search code examples
bashcommand-linestartupexpect

How to open a command-line application with a command without closing it?


I am trying to write a script that opens a command-line application (sagemath in this case) which on start up will send a certain command down the pipe (attach a script) without closing the application at the end.

I tried something like:

#!/bin/bash

echo "load(\"script.sage\")" | sage

This, of course, opens sage load the script print the output of the script and closes sage. Adding & at the end of the last line didn't work.

I know that technically I can add this script to the list of scripts which are loaded on startup always but this is not what I want. I thought that it might be done be making a dynamic link at some directory to my script, but not sure if there is such a directory and where it is.

Any suggestions?

Edit: I didn't know about Expect (I'm a youngster in linux). Reading about, following Mark's suggestion, it a bit I managed to solve this. If this is of any interest to anyone in the future then this does the trick:

#!/usr/bin/expect
set timeout 20
spawn sage
expect "sage:"
send "load(\"script.sage\")\n"
interact

Solution

  • #!/usr/bin/expect

    set timeout 20

    spawn sage

    expect "sage:"

    send "load(\"script.sage\")\n"

    interact