1

我的问题与此类似。 在 nohup 中使用别名

我花了很多时间自定义我包含在我的 .bashrc 中的函数,我希望它使用 nohup 运行,因为我想以这种方式多次运行命令。

for i in `cat mylist`; do nohup myfunction $i 'mycommand' & done

有小费吗?

4

2 回答 2

3

nohup您可以通过ing a使用函数(不是别名)来执行此操作bash -c(这与运行外部 bash 脚本基本相同)。

为了使其工作,您需要将您的功能标记为exported

# define the function
echo_args() {
  printf '<%s> ' "$@"
  printf "\n"
}
# mark it as exported
declare -fx echo_args

# run it with nohup
nohup bash -c 'echo_args "$@"' bash_ "an argument" "another argument"

参数bash_为子shellnohup提供了一个“名称” bash -c;也就是说,它变成了$0子shell中的值。它将被添加到错误消息(如果有的话)之前,所以我尝试使用一些有意义的东西。

于 2013-11-14T16:32:30.990 回答
2

nohup不适用于函数。您需要创建一个包装并执行该函数的 shell 脚本。然后你可以运行shell脚本nohup

像这样:

测试.sh

#!/bin/bash
function hello_world {
    echo "hello $1, $2"
}

# call function 
hello_world "$1" "$2"

chmod +x test.sh然后在你的for循环中调用它:

for i in `cat mylist`; do 
    nohup ./test.sh $i 'mycommand' & 
done
于 2013-11-14T15:45:56.430 回答