Reputation
2,088
Top tag
Next privilege 2,500 Rep.
Create tag synonyms
Badges
3 16 37
Impact
~127k people reached

Aug
18
comment How do I *reliably* and *simply* get the current shell interpreter name?
yes, I've run into this already. The worst thing is fish won't even load a script that has syntax it doesn't like, so you can't just send STDERR to /dev/null. But I have a solution, which I will post once I've got it all working.
Aug
17
comment How do I *reliably* and *simply* get the current shell interpreter name?
@StéphaneChazelas: I think you are right that it's generally not worth the effort (certainly generally not, and maybe always not) but I'm not ready to give up... I think the problem breaks down into 2 problems really: 1st getting the shell name, and 2nd using it. Both (at least practically) require some outside help to avoid the limitations of the shells that you could be using. I've solved the first problem with a small utility written in Crystal, and when I find time I want to solve the 2nd one as well. Btw, your solution is brilliant, but obviously very complex.
Aug
11
comment How do I *reliably* and *simply* get the current shell interpreter name?
@G-Man: updated. Please take a look and let me know if you have any more questions.
Aug
11
comment How do I *reliably* and *simply* get the current shell interpreter name?
@G-Man: I'm curious why you haven't "unmarked" this as a duplicate yet. I can give you several more differences between what I'm asking for and Stéphane’s answer if you need it.
Aug
9
comment How do I *reliably* and *simply* get the current shell interpreter name?
Also, his approach doesn't give just the name, and it's certainly not simple. I've worked out an approach that I think meets all these criteria, which I've published to GitHub.
Aug
9
comment determine shell in script during runtime
Yes, the latter: from an interactive zsh session I ran whatshell.sh.
Aug
9
comment How do I *reliably* and *simply* get the current shell interpreter name?
@gwillie: btw I up-voted this since I think it was a noble attempt, and since you gave a warning that it doesn't work it seems that there's no reason to 'punish' you with downvotes as some people did... I'm not sure if SE will let you delete it to prevent more downvotes but you might want to consider that
Aug
9
comment How do I *reliably* and *simply* get the current shell interpreter name?
yeah, his answer is extremely interesting and impressive, but it unfortunately misidentifies zsh on my system as bash. I have other qualms about it—though whoever wrote it seems to be a genius—but that's the biggest one.
Aug
9
comment determine shell in script during runtime
This is extremely interesting and impressive, but it identifies zsh on my system as bash 3.2.53(1)-release.
Aug
9
comment How do I *reliably* and *simply* get the current shell interpreter name?
@G-Man: I explained in my comments and an update to my question how the other question mentioned doesn't provide an answer my question.
Aug
9
comment How do I *reliably* and *simply* get the current shell interpreter name?
I'm asking for something cross-platform, which for me would include not just Linux (Debian and Red Hat based distros), but also OS X, Solaris, and major BSD variants at a minimum. I'll make this more explicit in the question, since when I posted the question I was expecting that there would be something inside the shells that could give us this info, which appears not to be the case.
Aug
9
comment How do I *reliably* and *simply* get the current shell interpreter name?
Yes it may appear at first glance to be a duplicate, but it's not. The accepted answer for that question fails for me on (1) zsh, (2) fish, (3) sh, (4) bash, (5) csh, (6) tcsh, and (7) ksh, and I gave up testing after that. Since it is relying on something outside of the shells themselves, it should be common across most major platforms, but that solution appears to be Linux only. (continued...)
Aug
8
comment How do I *reliably* and *simply* get the current shell interpreter name?
This is the insight that I eventually settled on—that you need an outside program to do the work—although I got it when reading G-Man's comment about sh -c "...", which he took from another question. (Sorry: I skipped your answer at first because I didn't see any code in it, and only came back and read it later.)
Aug
8
comment How do I *reliably* and *simply* get the current shell interpreter name?
Ideally I think I'd want the real shell—if that's what determines actual compatibility—but I'd be happy enough with the on-disk name of the executable. Do you have in mind cases of malicious tampering, or cases where (e.g.) calls to sh are really handled by bash? In the latter case I guess it depends on how well bash mimics sh: will it fail on things that sh would have failed on?
Aug
8
comment How do I *reliably* and *simply* get the current shell interpreter name?
@Gilles: not the path, just the name of the shell. (I didn't understand the second question.)
Aug
7
comment How do I *reliably* and *simply* get the current shell interpreter name?
@DarkHeart: actually that fails to, since the variable assignment wasn't the problem on csh/tcsh, it was this part: ps -p $$ -o args='' | cut -f1 -d' ', which returns -sh on csh, and -csh on tcsh.
Aug
7
comment How do I *reliably* and *simply* get the current shell interpreter name?
Basile: in any source-able function, it will be much more maintainable if you can keep the source in one file, rather than repeating code across 5 files, or whatever. And if the differences between the shells can as much as possible be handled by other functions that your function depends on, then you can keep a sane code base. Simply re-writing everything several times is a recipe for maintenance nightmares. No one writes 5 versions of a web app just because there are browser differences.
Aug
7
comment How do I *reliably* and *simply* get the current shell interpreter name?
To read the entirely off-topic discussion on whether Python is a shell: see here
Aug
7
comment How do I *reliably* and *simply* get the current shell interpreter name?
with a small modification it will work in fish, but then only in fish, unfortunately: ps h -p %self -o args='' | cut -f1 -d' '. This creates a chicken and egg problem... you have to know you're in fish in order to execute the fish version of the code...
Aug
7
comment How do I *reliably* and *simply* get the current shell interpreter name?
This fails in csh and tcsh.