我的问题与此类似。 Using aliases with nohup
我花了很多时间自定义我在.bashrc中包含的函数 我希望它与nohup一起运行,因为我想以这种方式多次运行一个命令。
for i in `cat mylist`; do nohup myfunction $i 'mycommand' & done
任何提示?
答案 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
的值。它将被添加到错误消息(如果有的话)之前,所以我尝试使用有意义的东西。