我该如何编写一个可以自称的bashrc别名



我有以下设置:

在我的~/.bashrc中,我只调用一个脚本,我的实际设置存储在:中

source C:/path/To/mybashrc.sh

正如你可能看到的,我使用gitbash for Windows(不确定,如果这很重要的话(:

$ bash --version
GNU bash, version 4.4.23(1)-release (x86_64-pc-msys)
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

现在我想创建一个命令,使我能够直接编辑这个脚本。我发现了如何获得脚本的目录(1(,在另一篇文章中,我发现了怎样获得脚本名称本身(2(。

# Edit this file with nano
#(1)
__dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
#(2)
script_name=`basename "$0"`
# script_name="mybashrc.sh" # This works.
alias mybashrc='nano ${__dir}/${script_name}'

然而,我的问题是,我无法将这两种解决方案结合起来。当我尝试该脚本时,它会在nano的正确目录中打开一个名为bash的文件,而不是mybashrc.sh。问题可能是.bashrc中脚本的来源,我想知道我是否还能找到所需的解决方案。我期待着任何暗示。(当然,注释外的行是有效的,因为名称是硬编码的,但这对我来说不是一个解决方案,因为脚本名称在现实世界中不同,我有。(

路径已在${BASH_SOURCE[0]}中。您的代码从${BASH_SOURCE[0]}获取目录,从$0获取文件名。所以不要从$0中获取,要从BASH_SOURCE[0]中获取。

alias mybashrc="nano ${BASH_SOURCE[0]}"

但是,BASH_SOURCE[0]可能是相对的。所以,让我们确保它是绝对的。

alias mybashrc="nano $(readlink -f "${BASH_SOURCE[0]}")"

将在带有空格的路径上断开。更有经验的shell程序员可能会写:

alias mybashrc="nano $(printf "%q" "$(readlink -f "${BASH_SOURCE[0]}")")"

或者你可以使用一个在使用时扩展的变量,但仍然记得引用扩展:

thescript=$(readlink -f "${BASH_SOURCE[0]}")
alias mybashrc='nano "$thescript"'

最新更新