Bash

您能否將多個可執行腳本放在一個目錄中,並通過採購該目錄使所有這些命令可用?

  • December 14, 2017

我想將一堆可執行腳本放在 .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

你不能用一個來做到這一點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),它們將在腳本為sourced 時執行。它們不會在採購外殼中生成任何功能。

$ 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其他)

引用自:https://unix.stackexchange.com/questions/410773