我想创建一个在后台运行的脚本(带&
),并检查某个文件,其名称是从键盘读取的,存在于多个目录中,作为参数给出。
因此脚本将在while true
循环中运行,直到创建具有给定名称的文件。
问题是,当我运行脚本时,我从读取的内容被视为普通的终端cmd。
这是脚本:
#!/bin/bash
echo Type the file name
read fileName
while true
do
for file in $@
do
if find $file -name $fileName | grep -q "$fileName"
then
echo The file with name $fileName has been created!!!
break
fi
done
done
如果我没有使用&
运行脚本,它可以正常工作。
答案 0 :(得分:3)
我认为你想要做的只是将没有用户输入的脚本部分发送到后台。如果在脚本中而不是在命令行中使用&
,则可以这样做。
#!/bin/bash
echo Type the file name
read fileName
while true
do
for file in "$@"
do
if find "$file" -name "$fileName" | grep -q "$fileName"
then
echo "The file with name $fileName has been created!!!"
break
fi
done
done &
请注意我添加了额外的引用,以防止名称包含特殊字符的文件出现问题。
如果需要,您也可以将while
循环选项设置为背景,以便您可以在调用脚本时选择您喜欢的行为。
答案 1 :(得分:0)
我将使用以下命令替换您的脚本:
sleep 2; read -p "x=" x; echo "x=$x"
您可以在不更改"脚本的情况下获得输入"与
echo Hello | sleep 2; read -p "x=" x; echo "x=$x"
如果您希望将脚本放在一起,请使用
echo Hello | (sleep 2; read -p "x=" x; echo "x=$x")
将命令放在ackground中似乎很好用:
echo Hello | (sleep 2; read -p "x=" x; echo "x=$x")&
如果您想在后台使用echo Hello
,请使用
(echo Hello | (sleep 2; read -p "x=" x; echo "x=$x"))&
答案 2 :(得分:0)
您可以通过在命令行中提供文件名来简化此操作,如果可以接受,请参阅以下内容:
#!/bin/bash
fileName="$1"
shift
while true
do
for file in "$@"
do
if find "${file}" -name "${fileName}" | grep -q "${fileName}"
then
echo The file with name ${fileName} has been created!!!
break
fi
done
done
您可以通过以下方式启动:
$ ./script.sh FILE DIR1 DIR2 &