NEQWIN =为什么Bash variable BASH_SOURCE有时不受约束?在这里,我体验过它:
几个月前我设计了&定义了这些方便的无论证的函数:
me_pushd_N78MKZ(){ #N78MKZ={NEQUFJ= pushd the current executing file's folder}
pushd "$(dirname "${BASH_SOURCE[1]}")">/dev/null #N78MR4[enter link description here][2]=copy N6L19G; {based on http://www.gnu.org/software/bash/manual/html_node/Bash-Variables.html#index-BASH_005fSOURCE} {#N6W3XI="$0" gets the bash script name NOT this file if this file is sourced, as shown at N6W3KE, so replace with present.}
};export -f me_pushd_N78MKZ
me_popd_N78UN9(){ #N78UOX=undoes/closes me_pushd_N78MKZ
popd >/dev/null #N78UO9
};export -f me_popd_N78UN9
- 它们是如此有用,它们在我的.bashrc的开头是它的第一个代码,因为我实际上使用的是下一个命令我的.bashrc:具体来说我的余数代码基本上是me_pushd_N78MKZ; remainder_code; me_popd_N78UN9;
所以然后在remaining_code中,每当我执行source a_path
时,a_path引用可以相当可靠 - 然后更好 - 使我能够将我的.bashrc(以及大多数任何bash脚本)分解为包含的子模块,以便更好地管理它。调用此函数对还可以为需要访问多个文件的任何脚本启用更简单(相对)的路径引用(如下面的备份脚本bup.bak.N6KDW2.bash)
然而现在(并且似乎仅在最近几天),${BASH_SOURCE[1]}
有时会失败:
BASH_SOURCE[1]: unbound variable
#!/bin/bash\n a_few_to_zero_seemingly_unimportant_commands\n me_pushd_N78MKZ #NEQKEU=\n
)时是,和是me_pushd_N78MKZ调用的实际正常位置:.bak_set_N6RV5U.bash也就是bup.bak.N6KDW2.bash来源的配置脚本。${BASH_SOURCE[@]}
(或此脚本开头调用的其他函数)时,该变量未定义,但非常相关{${FUNCNAME[@]}
和{{1}每个都有适当的&多个值。 那么为什么&何时${BASH_LINENO[@]
未定义?为什么它发生在我身上?
${BASH_SOURCE[@]}
已经作为它的最后一个值${FUNCNAME[@]}
),然而我得到它在函数调用中未定义的东西,没有明确的模式,我什么时候可以看到。 感谢您的帮助。
NEQWBQ =旁白:这段代码为“NEQWBQ”的是什么?它们是short IDs to uniquely-reference, date-stamp, and portably-track most any point, item, or content,包括我在这里用来唯一ID,因此跟踪点,代码行,变量&功能&文件名。
答案 0 :(得分:0)
当我从命令行定义函数时(因为未定义lineno?),这是我环境中的这一行引起了问题。
export PS4='+(${BASH_SOURCE}:${LINENO}): ${FUNCNAME[0]:+${FUNCNAME[0]}(): }'
取消设置可避免出现警告。