您能否将多个可执行脚本放在一个目录中,并通过获取该目录来使所有这些命令可用?

您能否将多个可执行脚本放在一个目录中,并通过获取该目录来使所有这些命令可用?

我想将一堆可执行脚本放入 .command 目录(也是可执行的)中,然后只需在我的 .bash_profile 中获取该目录即可。这可能吗?我可以让它与一个文件一起工作。但是,当添加第二个文件时,第二个文件的命令在 shell 中不可用。

我的 .bashprofile

source ~/.commands/*

我的 .commands 文件夹

-rwxr-xr-x   1 christopherreece  staff   108 Dec 14 08:55 server_utils.sh
-rwxr-xr-x   1 christopherreece  staff    23 Dec 14 09:04 short

短内容

echo 'a short program'

server_utils.sh 的竞赛

function upfile {
  scp $1 root@myserveripadress:~/
}

外壳输入和输出。

$ hello
hello

$ short
-bash: short: command not found

答案1

你不能用一个来做到这一点source。第一个参数被视为文件名,其他参数在源脚本中显示为位置参数$1, ...。$2

$ cat test.src 
echo hello $1
$ source test.src there
hello there

但你可以用循环来做到这一点:

for f in ~/commands/*.src; do
    source "$f"
done

(顺便说一句,如果您使用的编辑器将备份文件保留为尾随~.,那么让类似的内容仅包含具有特定扩展名的文件是非常有用的。这样,备份副本就不会意外地处于活动状态。)

但请注意,如果您有一个包含普通命令的源脚本(如echo上面的命令或您的命令short),它们将在脚本运行时执行source。它们不会在采购 shell 中生成任何函数。

$ cat test2.src 
echo "shows when sourced"
func() {
    echo "shows when function used"
} 
$ source test2.src 
shows when sourced
$ func
shows when function used

如果您想使用可执行脚本,即当您将其名称作为命令给出时脚本运行的那种,请将它们放在某个位置PATH(我建议~/bin为此使用),给予它们执行权限并在开头放置适当的 hashbang脚本(#!/bin/sh#!/bin/bash其他)

相关内容