在bashrc中运行一个函数或别名,或者通过nohup进行分析

时间:2013-11-14 15:41:39

标签: shell nohup .bash-profile bash

我的问题与此类似。 Using aliases with nohup

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

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

任何提示?

2 个答案:

答案 0 :(得分:2)

nohup无法使用函数。您需要创建一个包装并执行该函数的shell脚本。然后,shell脚本可以使用nohup

运行

像这样:

test.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

答案 1 :(得分:2)

您可以通过nohup 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_nohup的参数为bash -c子shell提供了“名称”;也就是说,它变成了子shell中$0的值。它将被添加到错误消息(如果有的话)之前,所以我尝试使用有意义的东西。