如何从另一个脚本调用bash脚本?

时间:2014-09-14 09:59:40

标签: bash shell call

我有两个非常简单的脚本。我问过这个问题但人们以为我是在不同的平台上做的。实际上这两个脚本都在同一个文件夹中。

一个是 source.sh

#!/bin/bash
echo "start"
./call.sh
echo "end"

第二是call.sh

#!/bin/bash
passDir="/etc/passwd"
while read line
do
    while true
        do
            echo "prompt"
            #propmt for username
            read -p "Enter username : " username
            egrep "^$username" $passDir >/dev/null
            if [ $? -eq 0 ]; then
                echo "$username exists!"
            else
                userName=$username
                break
            fi
        done                    
done < user.txt

user.text 文件只有两行中的两行

Hello
world

输出:

exisats!
prompt
exisats!
prompt
exisats!
prompt
exisats!
prompt
exisats!
prompt
exisats!
prompt

直到我按下Ctrl + d,我真的很感激,如果有人可以告诉我如何解决这个问题。

1 个答案:

答案 0 :(得分:1)

您可以将其缩小为最小示例

#!/bin/bash
while read line
do
    echo line is $line

    echo "prompt"
    read -p "Enter username : " username

    echo username is $username

done < user.txt

现在问题很明显:脚本从user.txt读取所有内容

只有read应该从user.txt读取。我们可以通过文件描述符

告诉read这样做
#!/bin/bash

exec 3< user.txt    # open the file, give it File Descriptor 3

while read -r -u3 line
do
    echo line is $line

    echo "prompt"
    read -p "Enter username : " username

    echo username is $username

done

exec 3<&-    # close the file