我想将一堆可执行脚本放入 .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
其他)