回答
如果腳本只定義了功能和沒有別的,你可以先使用source
或.
命令當前shell的上下文中執行腳本,然後簡單地調用該函數。有關更多信息,請參閱help source
。
以下命令第一寄存器中的上下文中的功能,則調用它:
. ./myScript.sh && func()
簡言之,沒有。
您可以使用source
(help source
瞭解詳情)將腳本中的所有功能導入到您的環境中,然後您可以將它們調用到您的環境中。這也有執行腳本的效果,所以要小心。
沒有辦法從shell腳本中調用函數,就像它是共享庫一樣。
我認爲應該給予更多的權重作爲適當的答案。我試圖做類似於OP所需的東西,但shell腳本根本不是爲「clean-cut,OOP開發」(恕我直言)設計的。 – 2014-12-18 17:23:17
好吧,雖然其他答案是正確的 - 你當然可以做別的事情:如果你有權訪問bash腳本,你可以修改它,並簡單地在末尾放置特殊參數"[email protected]"
- 將擴展到您指定的命令行的參數,並且由於它是「獨立的」,shell將嘗試逐字地調用它們;在這裏你可以指定函數名稱作爲第一個參數。例如:
$ cat test.sh
testA() {
echo "TEST A $1";
}
testB() {
echo "TEST B $2";
}
"[email protected]"
$ bash test.sh
$ bash test.sh testA
TEST A
$ bash test.sh testA arg1 arg2
TEST A arg1
$ bash test.sh testB arg1 arg2
TEST B arg2
波蘭,你可以先驗證命令存在,並且是一個函數:
# Check if the function exists (bash specific)
if declare -f "$1" > /dev/null
then
# call arguments verbatim
"[email protected]"
else
# Show a helpful error
echo "'$1' is not a known function name" >&2
exit 1
fi
大多數情況下使用'「$ @」'。在某些情況下'$ @'不安全。 – fumiyas 2015-04-10 13:21:53
編輯:警告 - 好像這並不適用於所有情況,但效果很好許多公共腳本。
如果你有所謂的「控制」一個bash腳本和裏面你調用一個函數「建」:
function build() {
...
}
然後,你可以這樣調用(從目錄中它在哪裏):
./control build
如果它的另一個文件夾內,這將使它:
another_folder/control build
如果你的文件我叫做「control.sh」,將作出相應的函數調用是這樣的:
./control.sh build
我有一個情況我需要從bash腳本的功能,必須在此之前(例如執行通過source
)和@$
的問題是myScript.sh然後運行兩次,似乎...所以我想出了主意,讓功能不與SED:
sed -n "/^func()/,/^}/p" myScript.sh
而且在我需要時間來執行它,我把它放在一個文件,並使用source
:
sed -n "/^func()/,/^}/p" myScript.sh > func.sh; source func.sh; rm func.sh
- 1. 通過命令運行腳本
- 2. 通過python腳本運行ffmpeg命令
- 3. 如何通過傳遞命令行參數通過Python運行R腳本
- 4. 如何通過腳本/命令行
- 5. 從Windows命令行運行Python腳本,參數未通過
- 6. 如何從命令行運行腳本?
- 7. 腳本在命令運行時運行
- 8. 如何通過PHP腳本運行wine命令
- 9. 如何切換用戶通過shell腳本運行命令?
- 10. 如何使用sudo命令通過for循環運行腳本
- 11. 如何通過shell腳本運行git命令?
- 12. 通過運行命令在shell腳本中設置變量
- 13. 如何通過普通的Zend Framework應用程序運行命令行腳本
- 14. 命令在命令行中運行,但在Perl腳本中運行
- 15. 如何通過命令行在服務器上運行php腳本
- 16. 通過Windows命令行運行Python腳本
- 17. 從命令行通過shell_plus運行python腳本
- 18. 在命令行上運行asp腳本
- 19. 在命令行運行Shell腳本
- 20. 如何從腳本運行raco命令?
- 21. 在Ruby腳本中運行命令行命令
- 22. 命令如果通過命令提示符運行,但不在腳本中運行..?
- 23. 通過命令行選項CSH腳本
- 24. 如何從命令行將Java腳本運行Groovy腳本?
- 25. 在shell腳本中運行命令
- 26. 在Expect腳本中運行Rsync命令
- 27. 在Matlab中運行腳本命令
- 28. 在perl腳本中運行awk命令
- 29. 在python腳本中運行cmake命令
- 30. 在bash腳本中運行hadoop命令
此方法的唯一問題是,如果在函數中使用'exit',它將在執行函數後關閉終端。有沒有辦法解決? @SvenMarnach – user1527227 2014-09-02 23:01:42
@ user1527227:在這種情況下,請與下一個答案一起去,因爲您已經掌握了shell腳本。如果你不這樣做,你可以先調用一個交互式子shell(只需輸入'bash'),'exit'只會終止子shell,而不是終端。 – 2014-09-03 10:09:27