Differences between revisions 4 and 5
Revision 4 as of 2012-02-22 10:13:19
Size: 1329
Editor: cli234-60
Comment: Typo in the title
Revision 5 as of 2012-09-11 07:41:59
Size: 1640
Editor: dslb-088-072-055-065
Comment:
Deletions are marked like this. Additions are marked like this.
Line 26: Line 26:

<<Anchor(faq110)>>
== Can I use something like templates with bash? ==
Bash does not have any native way to use templates. However, depending your actually goals may just evaluating the file with an new bash or shell instance could do the trick.

However, this is discussed on the [[TemplateFiles]]-Page

How can I tell whether my script was sourced (dotted in) or executed?

Usually when people ask this, it is because they are trying to detect user errors and provide a friendly message. There is one school of thought that says it's a bad idea to coddle Unix users in this way, and that if a Unix user really wants to execute your script instead of sourcing it, you shouldn't second-guess him or her. Setting that aside for now, we can rephrase the question to what's really being asked:

I want to give an error message and abort, if the user runs my script from an interactive shell, instead of sourcing it.

The key here, and the reason I've rephrased the question this way, is that you can't actually determine what the user typed, but you can determine whether the code is being interpreted by an interactive shell. You do that by checking for an i in the contents of $-:

# POSIX(?)
case $- in
  *i*) : ;; 
    *) echo "You should dot me in" >&2; exit 1;;
esac

Or using non-POSIX syntax:

# Bash/Ksh
if [[ $- != *i* ]]; then
  echo "You should dot me in" >&2; exit 1
fi

Of course, this doesn't work for tricky cases like "I want my file to be dotted in from a non-interactive script...". For those cases, see the first paragraph of this page.

Can I use something like templates with bash?

Bash does not have any native way to use templates. However, depending your actually goals may just evaluating the file with an new bash or shell instance could do the trick.

However, this is discussed on the TemplateFiles-Page

BashFAQ/109 (last edited 2023-12-01 11:40:50 by emanuele6)