【问题标题】:(Ubuntu) Linux: Is it possible to find out if you're running inside §script§ command?(Ubuntu) Linux:是否可以确定您是否在 §script§ 命令中运行?
【发布时间】:2014-09-09 11:46:42
【问题描述】:

~/.bashrc 在登录时不断创建script 会话时出现这种情况,除非通过 CTRL+C 退出,所以我认为特定命令必须有一个 if 来检查我们是否已经在运行 script 会话所以它不会无限期地创造新的。

【问题讨论】:

  • 您可以随时浏览您的流程树以查看您的父母是谁。你的目标是什么操作系统?如果您可以假设 Linux,那么您可以使用 procfs 使工作稍微容易一些。
  • @CharlesDuffy:Ubuntu (12.04.4)。
  • ...好吧,等等——如果你说的是无限期的,这听起来就像你正在编写一个在脚本下递归调用自身的工具。如果,那么有不同的更好的方法来处理这个问题。
  • @CharlesDuffy:我自己也不相信,但是在.bashrc 中有script 使它无限期地创建会话,因为每次进行会话时文件都会运行,这证明了不是必须exit 超过它创建的会话数; 5 个额外的会话,递归地,在第一个会话中。我不能总是有 cronjob chmodding /dev/pts/ 所以我寻找方法,script 似乎是治愈方法,但是每次你都必须输入它 su 不是一个选项,但有 script由于script 会话的递归创建,在.bashrc 中确实是个坏主意。
  • 你真正的目标是什么?记录用户的所有操作?以该用户身份运行script 绝对是错误的方法;用户逃避或修改日志记录是微不足道的,因为他们拥有的进程必然在日志目标上有一个打开的文件句柄。

标签: linux bash shell ubuntu scripting


【解决方案1】:

如果你要做类似的事情

exec script "session.$(date)"

...在可以递归的情况下,先设置环境变量,不设置时再继续:

[[ $- != *i* ]] && [[ -z $SCRIPT_RUNNING ]] && {
  export SCRIPT_RUNNING=1
  exec script "session.$(date)"
}

...$- 测试在非交互式 shell 上跳过了这个; SCRIPT_RUNNING 测试在先前由父进程设置时会跳过它。

也就是说,如果您出于任何安全目的而这样做,那是完全不合适的。从.bashrc 开始script 意味着记录用户操作的进程由该用户拥有和控制……利益冲突,很多吗?这也意味着以命令行参数开头的交互式 shell 会被不带命令行参数的 shell 替换,这可能会破坏软件做有趣的事情。

【讨论】:

    猜你喜欢
    • 2012-01-10
    • 2012-02-25
    • 2017-01-09
    • 2018-09-28
    • 2013-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-30
    相关资源
    最近更新 更多