2015-11-12 172 views
1

我想在Bash腳本中執行Zsh函數命令。下面是一個例子:如何在Bash腳本中執行Zsh shell命令

〜/ .zshrc

hello() { 
    echo "Hello!" 
} 

hello.sh

#!/bin/bash 
hello 

在上面的zsh bash腳本執行

(zsh) $ ./hello.sh 
hello command not found 

我也試圖與here文檔:

#!/bin/bash 
/bin/zsh - <<'EOF' 
    hello 
EOF 

用heredocs執行上面的腳本也說命令未找到錯誤。

有什麼建議嗎?

謝謝!

+0

防守運行命令在你的bash腳本中的函數。調用腳本中'.zshrc'中定義的函數有什麼意義?你永遠不應該這樣做(即使在Zsh腳本中,除非你有合理的理由)。而且,如果你足夠深入,bash和zsh並不完全兼容。 – 4ae1e1

+0

一個有效的例子是virtualenwrapper的workon命令。即使你在bash中定義了相同的函數或源代碼,當前的zsh shell也不會被給定的虛擬環境所反映。 – abhiomkar

+2

如果你需要當前的shell環境,你可以使用一個函數(而不是腳本;當然這個函數可以保存在一個文件中並且來源)或者傳遞環境變量(或者作爲命令行參數)。在非交互式腳本中採購交互式init文件在任何情況下都是不好的做法,更不用說shell不兼容問題了。 – 4ae1e1

回答

4

您可以使用它像:

#!/bin/bash 

/bin/zsh -i -c hello 

-i:強制外殼是互動

然後,如果shell是交互式的,命令是從/etc/zshrc讀取,然後$ZDOTDIR/.zshrc(這通常是你的$HOME/.zshrc

-c:在此殼