我是 shell 腳本的新手,最近撰寫了一個腳本來打開一個新的終端視窗并通過 osascript 使用“do shell script”運行定義的函式,但結果顯示找不到命令。我的腳本如下:
#!/bin/bash
hello() {
echo "Hello World"
}
openNewWindowAndRun() {
osascript -e "
tell application \"Terminal\"
activate
do script \"$1\"
end tell
"
}
openNewWindowAndRun hello
我也嘗試在 openNewWindowAndRun 中直接呼叫hello函式,但沒有得到任何運氣:
#!/bin/bash
hello() {
echo "Hello World"
}
openNewWindowAndRun() {
osascript -e "
tell application \"Terminal\"
activate
do script \"hello\"
end tell
"
}
openNewWindowAndRun
當我運行腳本時,它成功打開了新視窗,但顯示了錯誤訊息:

有誰知道這里遺漏了哪一部分?是否可以將定義的函式作為引數傳遞給 osascript?如果有人可以幫我一把,那就太好了!
uj5u.com熱心網友回復:
hello()如果函式在.bashrcor.bash_profile或 or中定義.zshrc(取決于您使用的 shell),您的腳本將正常作業。
這里的問題是,當您呼叫osascript創建新終端時,新創建的終端不知道名為hello.
因此,您必須以每個新創建的終端都知道該命令的方式定義它。因此,您可以將其放入您的腳本中.bashrc,也可以創建一個以hello您命名的 shell 腳本$PATH并將所需的代碼放入該腳本中。
uj5u.com熱心網友回復:
您可以嘗試以下方法,這并不完美,但可以避免更改 .bashrc 或 .zshrc 等初始化檔案:
#!/bin/bash
hello() {
echo "Hello $@"
}
openNewWindowAndRun() {
local dirname="$(dirname "$BASH_SOURCE")"
local basename="$(basename "$BASH_SOURCE")"
osascript -e "
tell application \"Terminal\"
activate
do script \"cd '$PWD'; clear; '$dirname/$basename' $*\"
end tell
" > /dev/null
}
${@:-openNewWindowAndRun hello World}
運行:./test.sh
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/428527.html
上一篇:Sed命令不替換為檔案中的多行
