关于shell:如何从另一个脚本调用bash脚本?

How to call a bash script from another script?

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

一个是source.sh。

1
2
3
4
#!/bin/bash
echo"start"
./call.sh
echo"end"

第二个是call.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/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文件在两行中只有两个单词

1
2
Hello
world

输出:

1
2
3
4
5
6
7
8
9
10
11
12
exisats!
prompt
exisats!
prompt
exisats!
prompt
exisats!
prompt
exisats!
prompt
exisats!
prompt

在我按下ctrl+d键之前,我非常感谢有人能告诉我如何解决这个问题。


您可以将其简化为一个最小的示例:

1
2
3
4
5
6
7
8
9
10
11
#!/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这样做:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/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