![](/img/trans.png)
[英]How to run different functions with different users inside bash script
[英]Bash script returns different results for different users
我正在嘗試檢查特定文件是否打開。 我為此使用lsof,並且正在使用bash shell。 我寫了一個bash腳本來檢查文件是否打開。 但是,我面臨一個奇怪的問題。 當我使用user a
從命令行運行腳本時,得到了預期的結果。 但是,當我使用user b
運行腳本時,得到了不同的結果。
我需要以user b
身份從Talend Studio調用腳本,因此無法切換到user a
並執行腳本。 該腳本對user b
具有777
權限,並且user 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”停止此任務。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.