为位于我的一个文件夹中的shell脚本设置一个别名。

问题描述 投票:0回答:2

所以我有一个文件夹BashScripts,它的目录路径是这样的

/home/sadnan/BashScripts

/home/sadnan 是我 $HOME. 我打算把我的自定义shell脚本放在这里。目前只有一个名为 cbi.sh. 当我在文件夹内运行时,脚本的工作与预期的一样。现在我希望能够在全局范围内运行它。所以我在我的.bashrc文件中添加了以下内容。

#For my personal Bash Scripts
if [ -d $HOME/BashScripts ]; then
 PATH="$PATH:$HOME/BashScripts"
fi

alias cbi='. ./cbi.sh'

所以现在当我做 echo $PATH 它打印出以下内容

/home/sadnan/.nvm/versions/node/v12.18.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/sadnan/BashScripts

所以这个文件夹似乎被添加到了PATH中。如果我没有理解错的话,这应该允许我在全球范围内运行我的shell脚本。

然后我还为脚本设置了一个别名,并将其命名为 cbi

但现在当我运行 cbi./cbi.sh 在我的终端上,我得到的是

bash: ./cbi.sh: No such file or directory

我到底做错了什么,我没怎么做过shell脚本。但我想这是个办法。

我也试过 alias cbi=`source ./cbi.sh'alias cbi=`sh ./cbi.sh'都没有用。

linux bash shell alias
2个回答
1
投票

./cbi.sh 意思是 "从当前目录运行 cbi.sh"。 所以如果你不在 /home/sadnan/BashScripts 它将无法工作,因为它找不到 cbi.sh 的目录中。

要确认你的PATH设置是否正确,请执行 which cbi.sh. 它应该返回 /home/sadnan/BashScripts/cbi.sh.

如果你 必须 有一个别名,你可以做 alias cbi='/home/sadnan/BashScripts/cbi.sh'. 这是保证正确执行的最简单方法。

要想上述所有的工作。cbi.sh 必须是可执行的(chmod u+x cbi.sh).


如果你想来源(. cbi.sh),而不是像可执行文件一样调用它,像这样定义你的别名。

alias cbi='. /home/sadnan/BashScripts/cbi.sh'

研究一下执行脚本和 "来源 "脚本之间的区别.

编辑: 根据@Diego的评论,我删除了这段文字。

你的PATH变量根本不会被使用。 然后,你应该删除PATH的附加部分,并且


2
投票

你要跑 cbi.sh:

# Wrong, the file is not named 'cbi'
cbi

# Wrong, the file is not in the current directory
./cbi.sh

# Wrong, same reason as above
alias cbi='. ./cbi.sh'
cbi

# Correct, this is the name of the file:
cbi.sh
© www.soinside.com 2019 - 2024. All rights reserved.