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

如何将此bash函数转换为fish shell?,bash,function,shell,fish,Bash,Function,Shell,Fish,在命令行中,我将其称为“runscriptname.py”,bash执行以下命令: function run () { nohup python $1 > nohup.out & } 你能帮我把这个翻译成鱼吗 到目前为止我已经有了这个 python scriptname.py > nohup.out & 当我在~/.config/fish/config.fish上调用source时 这只是说 function run bash -c "nohu

在命令行中,我将其称为“runscriptname.py”,bash执行以下命令:

function run () {
    nohup python $1 > nohup.out &
}
你能帮我把这个翻译成鱼吗

到目前为止我已经有了这个

python scriptname.py > nohup.out & 
当我在~/.config/fish/config.fish上调用source时

这只是说

function run 
    bash -c "nohup python $1 > nohup.out &"
end
没有提供任何关于错误是什么的有用提示

这是对fish中功能的完美有效(更正确)替代:

Error when reading file: ~/.config/fish/config.fish 
这相当于本机bash函数:

function run
    bash -c 'nohup python "$@" > nohup.out &' _ $argv
end
run(){
nohup python“$@”nohup.out 2>&1&
}
…就个人而言,我建议重写为使用
disown
而不是
nohup



关于从
fish
中看到的错误,我建议您注意可能影响您的文件是否可以读取的任何其他(与语法无关)权限等。

这里确实不需要执行
bash
,fish也可以执行
nohup
,重定向也可以工作等等

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

run() {
  nohup python "$@" </dev/null >nohup.out 2>&1 &
}
这将把$argv扩展到该脚本的所有元素,每个元素一个,因此
runscript.py banana
将运行
nohup python script.py banana>nohup.out&
。如果您确实希望只传递一个参数,则需要
$argv[1]


实际上,我不知道为什么在寻找config.fish时,您的定义会导致错误-您使用的是哪个fish版本?

是否希望在翻译时保留所有错误?…以及为什么使用
粘贴
?它在这里买不到任何有价值的东西。如果您(非常)希望将stdin转换为参数列表,
$(cat)
将等效地执行此操作……但请再次参阅,非常糟糕。它不会处理引号,不会让你转义,不会让你用空格传递参数。。。如果您描述了您的实际目标并要求提供实现目标的最佳方法,而不是给我们一个错误代码进行翻译,那会更好。@CharlesDuffy您是对的,粘贴是这次讨论的一个障碍。我把它拿走了。我的目标是使用我的脚本名在后台运行命令。。。因此,在nohup前面加上&并将scriptname粘贴到其中。感谢您的输入。请注意,在我的系统上,
nohup
打印了一条恼人的消息,关于stderr被重定向到stderr上的stdout,但在bash下执行相同操作时也应该会发生这种情况。
function run
     nohup python $argv > nohup.out &
end