gpt4 book ai didi

linux - Bash 脚本为不同的用户返回不同的结果

转载 作者:太空宇宙 更新时间:2023-11-04 12:47:19 25 4
gpt4 key购买 nike

我正在尝试检查特定文件是否打开。为此,我使用 lsof 并使用 bash shell。我写了一个 bash 脚本来检查文件是否打开。但是,我面临一个奇怪的问题。当我使用 user a 从命令行运行脚本时,我得到了预期的结果。但是,当我使用 user b 运行脚本时,我得到了不同的结果。

我需要从 Talend Studio 以 user b 调用脚本,因此我无法切换到 user a 并执行脚本。该脚本对 用户 b 具有 777 权限,并且 用户 b 也是该脚本的所有者。下面是脚本。请帮忙。

#! /bin/bash
# declare STRING variable

FILENAME=$1
if [ "$FILENAME" == "" ]; then
echo "No file found..exiting"
exit
fi
#While loop to check if the file has been completely copied
while true; do
#$(lsof /mnt/disk1/$FILENAME | wc -l)
SZ=$(/usr/sbin/lsof <Path to file>/$FILENAME | wc -l)
if [ $SZ -gt 1 ]; then
echo "File $FILENAME is being copied in the Landing Zone"
sleep 10
else
echo "Copied $FILENAME................"
break
fi
done

我需要在 sudoers 中添加 user b 吗?

最佳答案

你使用“lsof”的目的只是为了验证 $FILENAME 是否被打开,对吧?所以我认为更好的方法是在打开 $FILENAME 时创建一个标志文件,但不要使用“lsof”来验证,因为“lsof”是一种昂贵的方法。例如:

在您的“着陆区”:

#!/bin/bash

FILENAME=/foo/foo1
if [ -f /tmp/filename.flag ] ; then
echo "the file is opened now ..."
else
touch /tmp/filename.flag
cp -arf $FILENAME /tmp/. # or use rsync to copy it
echo "file copy is done ..."
rm -rf /tmp/filename.flag
fi

而且,有时您只需“触摸/tmp/filename.flag”即可停止此任务。

关于linux - Bash 脚本为不同的用户返回不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38341124/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com