如何将此bash函数转换为fish shell?

时间:2016-08-17 19:06:47

标签: bash function shell fish

function run () {
    nohup python $1 > nohup.out &
}

在命令行上,我将其称为“run scriptname.py”,bash执行以下命令:

python scriptname.py > nohup.out & 

你能帮我翻译成鱼吗?

到目前为止,我有这个...

function run 
    bash -c "nohup python $1 > nohup.out &"
end

当我在〜/ .config / fish / config.fish

上调用source时

这只是说

Error when reading file: ~/.config/fish/config.fish 

没有提供任何有用的提示,指出错误是什么。

2 个答案:

答案 0 :(得分:4)

这里真的没有必要执行bash,鱼也可以执行nohup,重定向也可以这样做。

有一个小的区别,而不是$ 1和$ 2等等,fish函数的参数存储在$ argv数组中。

function run
     nohup python $argv > nohup.out &
end

这会将$ argv扩展为每个元素的所有元素,因此run script.py banana将运行nohup python script.py banana > nohup.out &。如果你真的只想要传递一个参数,那么你需要$argv[1]

我实际上不知道为什么你的定义在导出config.fish时会导致错误 - 你使用的是哪个鱼版?

答案 1 :(得分:2)

这是鱼类功能的完全有效(且更正确)的替代品:

function run
    bash -c 'nohup python "$@" > nohup.out &' _ $argv
end

这相当于native-bash函数:

run() {
  nohup python "$@" </dev/null >nohup.out 2>&1 &
}

...我个人建议改写使用disown而不是nohup

关于从fish看到的错误,我建议关注可能影响您的文件是否可读的任何其他(不是语法相关的) - 权限等。< / p>