使用 bash 函数捕获 stdin/stdout 时将命令发送到后台

使用 bash 函数捕获 stdin/stdout 时将命令发送到后台

livy-server我有一个可以在命令行上直接运行的启动命令:

$cd /git/livy; nohup bin/livy-server > /tmp/livy.log 2>&1 &
[1] 4370
19:11:11/livy $
19:11:12/livy $ll /tmp/livy.log
-rw-r--r--  1 boes  wheel  436 Jan 26 19:11 /tmp/livy.log

但确实如此不是从一个函数开始。在我的程序中~/.profile有一个函数要启动livy-server

startlivy() { cd /git/livy; nohup bin/livy-server > /tmp/livy.log 2>&1 & ; }

/Users/boescst/.profile: line 432: syntax error near unexpected token `;'
-bash: /Users/boes/.profile: line 432: `startlivy() { cd /git/livy; nohup bin/livy-server > /tmp/livy.log 2>&1 & ; }'

这些&符号是否需要以某种方式进行转义?

顺便说一句,虽然这可能不会影响结果 - 但我仍在El Capitan

答案1

问题在于最后一个分号需要被删除。

startlivy() { cd /git/livy; nohup bin/livy-server > /tmp/livy.log 2>&1 & }

答案2

看来该问题仅在尝试使用单行代码时发生:即以下内容工作:

startlivy() { 
     cd /git/livy
      nohup bin/livy-server > /tmp/livy.log 2>&1 &  
}

注意:如果有人知道如何用一行代码来处理这个问题,我很想知道 - 并且会给予奖励。

相关内容