Bash 从脚本内执行脚本导致回显和读取问题

Bash 从脚本内执行脚本导致回显和读取问题

我似乎对从下标运行的脚本遇到了无法解释的问题。我一直无法获得解决方案,因此我会尽力帮助您解决问题。

问题:当从脚本内部运行脚本时,会出现从主 shell 运行脚本时不会出现的特定故障,例如

# ./user

出现的问题是所有“echo”语句都打印到同一行,即使给定 \n 和“-e”、“-n”,或者什么也不做。另一个主要问题是,代码中的“read”语句实际上是在其他所有内容之前运行的,当它是调试代码中最后运行的内容之一时,从下标内运行。

下面是从主脚本中执行的代码。

    #!/bin/bash

#Frame
. "/uhost/admin/uhost_files/UHU_FRAME.source"
. "/uhost/admin/uhost_files/UHU_DIR_EXECUTE.source"

arr_uhu_arg=("$@")
command_get="$1"

function Help () {
    echo -e -n "Allows creation, edition, and locking of user accounts stored on the UH2 system.\n"
    echo -e -n "Takes the following arguments: ${lblue} add lock del${nc}\n"
    echo -e -n "Can add, lock, and delete UNIX user accounts from the UH2 system.\n"
}

function Start () {
    if [[ " ${arr_uhu_arg[*]} " == *" add "* ]]; then
        echo "===== USER ADD ====="
        echo "Username: "
        read uhost_username
    fi
}

if [[ "$command_get" == "init_help" ]]; then
    Help # Runs Help function when used by the help command
else
    Start # Runs the main command's function
fi

这些脚本是通过主脚本中的行调用的:

echo `/bin/bash ${UHU_DIR_EXECUTE}/com/$uhu_sepcommand "$uhu_sepcommand_arg1" "$uhu_sepcommand_arg2"`

'$uhu_sepcommand' 是脚本文件,后跟参数。

那个部分

if [[ " ${arr_uhu_arg[*]} " == *" add "* ]]; then
        echo "===== USER ADD ====="
        echo "Username: "
        read uhost_username
    fi

两个“echo”语句都出现在一行上,“read”语句似乎在其他所有语句之前执行。

仅当从主脚本内执行脚本时才会出现故障。

使用 GNU bash,版本 4.2.37(1)-release (i486-pc-linux-gnu)

Debian GNU/Linux 7.7

编辑#1

吉尔斯的评论实际上回答了我的问题。下标全部累积在一起并作为一个“块”输出。需要澄清的是,该故障是输出与写入的内容不一致且不正确。改变

echo `/bin/bash ${UHU_DIR_EXECUTE}/com/$uhu_sepcommand "$uhu_sepcommand_arg1" "$uhu_sepcommand_arg2"`

/bin/bash ${UHU_DIR_EXECUTE}/com/$uhu_sepcommand "$uhu_sepcommand_arg1" "$uhu_sepcommand_arg2"

解决了问题。

相关内容