Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
zsh和parallel:如何使用函数。它说找不到命令_Zsh_Gnu Parallel - Fatal编程技术网

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-$$”

cat
sem
只是
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添加了激活,如果您尚未这样做。