我似乎对从下标运行的脚本遇到了无法解释的问题。我一直无法获得解决方案,因此我会尽力帮助您解决问题。
问题:当从脚本内部运行脚本时,会出现从主 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"
解决了问题。