zsh和parallel:如何使用函数。它说找不到命令
我有一个脚本文件 文件名:zsh和parallel:如何使用函数。它说找不到命令,zsh,gnu-parallel,Zsh,Gnu Parallel,我有一个脚本文件 文件名:test\u sem\u zsh.sh main() { echo "Happy day" } export -f main sem --id testing --fg main 我正在尝试使用zsh $ zsh test_sem_zsh.sh test_sem_zsh.sh:export:4: invalid option(s) zsh:1: command not found: main 它显示两个错误的1)未找到主命令和2)导出:4:无效选项 当我
test\u sem\u zsh.sh
main() {
echo "Happy day"
}
export -f main
sem --id testing --fg main
我正在尝试使用zsh
$ zsh test_sem_zsh.sh
test_sem_zsh.sh:export:4: invalid option(s)
zsh:1: command not found: main
它显示两个错误的1)未找到主命令和2)导出:4:无效选项
当我尝试使用bash
时,它在哪里工作
$ sh test_sem_zsh.sh
Happy day
因此,如何使该脚本与zsh
一起工作也不确定您要做什么,但这可能有助于您定义可以在sem
下运行的代码块,而无需bash的导出
:
#!/bin/zsh
# Create script in /tmp
script="/tmp/tmp-$$"
cat <<EOF > "$script"
echo "Happy day"
date
EOF
sem --id testing --fg /bin/zsh "$script"
rm "$script"
#/bin/zsh
#在/tmp中创建脚本
script=“/tmp/tmp-$$”
catsem
只是parallel--semaphore
的简写
您可以使用env_parallel
:
#!/usr/bin/zsh
# activate env_parallel (if not already done)
. =env_parallel.zsh
env_parallel --semaphore --id testing --fg main
或者,如果您的环境太大:
#!/usr/bin/zsh
# activate env_parallel (if not already done)
. =env_parallel.zsh
env_parallel --session
main() {
echo "Happy day"
}
env_parallel --semaphore --id testing --fg main
env_parallel --end-session
在zsh
中无法直接导出函数。请参阅Unix Stack Exchange上的这篇跨站点文章,我正在以zsh script.sh
的形式运行脚本。那么,对于这条特殊的命令,是否可以切换到bash
?您不能将here doc读入变量并将其传递给sem
?此外,可能还有一些错误:我认为这缺少一个chmodu+x临时文件。在将实际脚本写入herdoc时,变量的行为可能不符合预期,因为它们在运行脚本之前已展开。考虑使用文字遗传密码> SoCoWi,我同意它并不完美。没有必要使用chmod
,因为它是通过/bin/zsh
而不是通过shebang执行的。同意的OP可能想要使用文字的heredoc,但他的示例并不要求这样。谢谢你分享你的想法。哦,对了,我错过了/bin/zsh
。同样感谢您发布此答案并开放:)因为没有办法像使用bash
一样使用zsh
,我目前正在使用bash
env_parallel
这将如何改变zsh
@santhoshyedii,我不明白您的意思。尝试重新措辞-如果可能的话,包括一个例子。我的意思是你展示的代码,当我使用zsh test\u sem\u zsh.sh运行脚本文件时,它会工作吗?当我尝试使用zsh test\u sem\u zsh.sh运行代码时,它会显示未知选项:--session
和env\u parallel仅当它是一个函数时才工作。执行以下操作并重新启动shell。
@santhoshydi添加了激活,如果您尚未这样做。