문제

So I am trying to make a portable bashrc/bash_profile file. I have a single script that I am symbolically linking to .bashrc, .bash_profile, etc. I am then looking at $0 and switching what I do based on which script was called. The problem is what the shell calls the bashrc script of course it executes bash really which means $0 for me is -bash. $1 further more is not set to the script name.

So my question is, in bash how can I get the name of the script being executed. Not the binary executing it, e.g. bash?

I assume its giving me -bash with $1 not being set because it is really not a new process. Any ideas?

도움이 되었습니까?

해결책 2

The variable BASH_ARGV should work, it appears the script is being sourced

$BASH_ARGV

다른 팁

Try:

readlink -f ${BASH_SOURCE[0]}

or just:

${BASH_SOURCE[0]}.

Remarks:

$0 only works when user executes "./script.sh"

$BASH_ARGV only works when user executes ". script.sh" or "source script.sh"

${BASH_SOURCE[0]} works on both cases.

readlink -f is useful when symbolic link is used.

create .sh file lets say view.sh then put

#!/bin/bash
echo "The script is being executed..."
readlink -f ${BASH_SOURCE[0]}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top