frum icon indicating copy to clipboard operation
frum copied to clipboard

Frum init detects wrong shell inside shell scripts

Open depp opened this issue 2 years ago • 2 comments

I’m not sure what the exact cause is here.

Here is test.sh, which is executable:

#!/bin/sh
eval "$(frum init)"

If this script is run from zsh, the shell is detected as zsh, even though this command is running from a dash process.

$ ./test.sh
./test.sh: 6: eval: autoload: not found
./test.sh: 11: eval: add-zsh-hook: not found

I can run it from Bash, however:

$ bash
$ ./test.sh

At first I thought this was because the script was running inside dash, which is not handled in the shell detector. However, it seems that Frum simply doesn’t detect the shell when the shell is running a script:

#!/bin/bash
eval "$(frum init)"

This fails too, when invoked from zsh.

Thinking of a few ways my issue could be solved:

  • Autodetect shells when invoked from shell script
  • Allow shell to be specified as parameter to init (like frum init --shell=sh)
  • Provide a way to invoke commands using frum (like frum exec)

depp avatar Apr 08 '22 03:04 depp

It looks like the cause is that if you’re running a shell script, the process name is the name of the shell script, not the name of the shell. At least on Linux. It is easy enough to circumvent this by creating a subshell.

So, here's a workaround:

eval "$(sh -c 'frum init')"

depp avatar Apr 08 '22 03:04 depp

I was trying to run ruby commands from a cron job script but ran into this same scenario. However the above workaround still produces the same not found output for me.

This is an awful workaround, but it seems to get the job done:

ruby="/tmp/$(ls -t /tmp/ | grep frum_ | head -n 1)/bin/ruby"

dechimp avatar Apr 15 '22 17:04 dechimp