【问题标题】:Bash script works as it should when started from terminal but it doesn't when invoked by .bashrcBash 脚本在从终端启动时可以正常工作,但在 .bashrc 调用时却不能
【发布时间】:2015-08-27 13:37:06
【问题描述】:

第一个脚本叫做 wa.sh 下面是代码:

#!/bin/bash
sleep 2
/opt/Citrix/ICAClient/selfservice --icaroot /opt/Citrix/ICAClient

VDI=`pidof wfica | wc -w`
echo $VDI

while [ $VDI -eq 0 ]

do
        sleep 1
        echo "VDI is not running"
        VDI=`pidof wfica | wc -w`

done
echo "gonig to if.sh"
/opt/Scripts/if.sh&

if.sh 的内容 - 第二个脚本

#!/bin/bash

VDI=`pidof wfica | wc -w`
echo $VDI
while [ $VDI -eq 1 ]

do
        sleep 1
        echo "Vdi is currently running"
        VDI=`pidof wfica | wc -w`

done
pkill -u $(whoami)

当访客用户登录到 ubuntu 后由 .bashrc 调用第一个脚本时,它不会调用第二个脚本 - if.sh 这背后的逻辑是,当用户登录访客会话时,自助服务启动并且 VDI = 0 用户输入正确的凭据并启动他的会话 VDI = 1,这时我们需要开始监控 VDI 何时再次变为 0 以注销访客会话。 我已经尝试使用 source、exec 和 $() 调用第二个脚本无济于事。

【问题讨论】:

  • .bashrc 中使用时,第一个脚本的输出是什么?你看到echo $VDI 的输出了吗?你看到echo "gonig to if.sh" 的输出了吗?将set -x 添加到第一个脚本的顶部,看看实际运行的是什么。如果你想确保它没有运行(或者如果它运行了,看看它在做什么),第二个脚本也是如此。
  • 当 .bashrc 启动时没有输出或者我不知道如何检查它。当我登录来宾会话时,打开终端并使用 bash scriptname 启动脚本,它按预期工作(第二个脚本也是如此)。呼应一切。已经尝试过设置 -x 和 bash -nx,但只有在工作正常时才从热终端。
  • .bashrc 文件中的其他内容是否正常运行?显示.bashrc 文件?
  • 除了开始第一个脚本的那一行之外,.bashrc 中没有什么不寻常的地方。它在那里:pastebin.com/g0bgWNSX
  • .bashrc 为非登录的交互式 shell 启动。你可能想把它放在.bash_profile 中;有可能您的测试已经看到了由以前的 shell 启动的 wfica 实例,因此 wa.sh 永远不会超过它的循环。

标签: linux bash shell ubuntu


【解决方案1】:

访客帐户的权限有问题。将它们的脚本重新编写到守护程序中,现在一切正常。

【讨论】:

    猜你喜欢
    • 2020-02-27
    • 1970-01-01
    • 2019-11-23
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 2019-10-26
    • 1970-01-01
    • 2012-03-10
    相关资源
    最近更新 更多