如何从 Ubuntu 中的启动终端执行脚本正确启动脚本?

Posted

技术标签:

【中文标题】如何从 Ubuntu 中的启动终端执行脚本正确启动脚本?【英文标题】:How to start a script properly from a starter terminal executed script in Ubuntu? 【发布时间】:2020-04-04 11:39:18 【问题描述】:

假设您的面板中有一个启动器,它在终端模式下启动一个名为 foo.sh 的脚本。

foo.sh 在后台启动另一个名为 bar.sh 的脚本。

我遇到了问题:

首先:从bar.sh写入的文件名不同。

次主要:bar.sh脚本不独立,终端关闭时死掉。

我在旧的 16.04 上对此进行了测试。机器。

foo.sh

#!/bin/bash

#read an user input
read -r -t 60 -p ":" foo
echo "$foo"

#call bar script
/home/$USER/bar.sh "10" "$foo" & disown

#show if bar.sh was started
echo $?

#sleep a short time to see the echo's
sleep 3

bar.sh

#!/bin/bash

#sleep some time
[[ -n "$1" ]] && sleep $1

#then write user input to file called output
echo "$2 - sleept $1 seconds" >> /home/$USER/output

如果 foo 的睡眠时间比 bar 长 输出文件被写入但称为输出? (末尾有 ?)。

但如果 bar 中的时间较大,则当 foo 完成并关闭终端时, bar 将被终止。

知道如何正确设置 bar.sh 的背景实例吗? 另一个保持打开状态的终端对我来说不是解决方案。 THX!

【问题讨论】:

我投票结束这个问题,因为你的问题更适合问 Ubuntu 【参考方案1】:

这个答案来自Ask Ubuntu的学习者:

“nohup”代表“不挂断”。顾名思义,即使会话断开,它也会继续运行命令而不挂断。它用于在远程服务器上运行需要很长时间才能完成的命令(备份数据库等)。

通常,脚本的日志(如果有)存储在 ~/nohup.out 文件中。但是您可以选择捕获日志,方法是附加或用新内容替换旧内容的日志。 ">" 单个大于号将用新日志替换旧日志。 ">>" 双大于号会将日志附加到文件末尾。

我正在使用以下格式在 crontab 中运行相同的内容。在这种情况下,我将替换旧日志。 /path/to/script_folder/script_name.sh > /path/to/script_folder/logs/script_name.log 2>&1

【讨论】:

以上是关于如何从 Ubuntu 中的启动终端执行脚本正确启动脚本?的主要内容,如果未能解决你的问题,请参考以下文章

Ubuntu Desktop下自动启动终端并运行脚本

如何执行启动另一个 python 脚本的 python 宏?

Ubuntu16.04怎么将桌面左侧的启动器移动到屏幕底部

linux如何在终端启动程序后可以继续输入命令?

从远程终端用 X11 中的 VLC 播放视频

PUPPY LINUX下SHELL脚本如何单击自动执行? 目前写了个脚本,只能右键单击,在弹出菜单里选“在终端下运行