在 osascript 中传入 "do shell script" 时找不到已定义的 bash 命令
Defined bash commands not found when passed in "do shell script" in osascript
我是 shell 脚本的新手,最近写了一个脚本来打开一个新的终端 window 和 运行 通过 osascript 使用“do shell 脚本”定义的函数,但结果显示找不到命令。我的脚本如下:
#!/bin/bash
hello() {
echo "Hello World"
}
openNewWindowAndRun() {
osascript -e "
tell application \"Terminal\"
activate
do script \"\"
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
当我 运行 脚本时,它成功打开了新的 window 但显示错误消息:
有谁知道这里遗漏了哪一部分?是否可以将定义的函数作为参数传递给 osascript?如果有人能帮助我,那就太好了!
如果函数 hello()
定义在 .bashrc
或 .bash_profile
或 .zshrc
中(取决于您是哪个 shell使用)。
这里的问题是,当您调用 osascript
创建一个新终端时,新创建的终端不知道名为 hello
.[=19 的函数(或命令) =]
因此,您必须以每个新创建的终端都知道该命令的方式定义它。因此,您可以将它放在 .bashrc
中,或者您可以在 $PATH
中创建一个名为 hello
的 shell 脚本,然后将所需的代码放入该脚本中。
您可以尝试以下方法,虽然不完美,但可以避免更改 .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
我是 shell 脚本的新手,最近写了一个脚本来打开一个新的终端 window 和 运行 通过 osascript 使用“do shell 脚本”定义的函数,但结果显示找不到命令。我的脚本如下:
#!/bin/bash
hello() {
echo "Hello World"
}
openNewWindowAndRun() {
osascript -e "
tell application \"Terminal\"
activate
do script \"\"
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
当我 运行 脚本时,它成功打开了新的 window 但显示错误消息:
有谁知道这里遗漏了哪一部分?是否可以将定义的函数作为参数传递给 osascript?如果有人能帮助我,那就太好了!
如果函数 hello()
定义在 .bashrc
或 .bash_profile
或 .zshrc
中(取决于您是哪个 shell使用)。
这里的问题是,当您调用 osascript
创建一个新终端时,新创建的终端不知道名为 hello
.[=19 的函数(或命令) =]
因此,您必须以每个新创建的终端都知道该命令的方式定义它。因此,您可以将它放在 .bashrc
中,或者您可以在 $PATH
中创建一个名为 hello
的 shell 脚本,然后将所需的代码放入该脚本中。
您可以尝试以下方法,虽然不完美,但可以避免更改 .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