我有一个菜单脚本,该脚本读取多行文本的输入,有时输入40多个短行(每行是特定作业的名称)。我需要从Windows粘贴功能中读取这些行,并将其存储在文件中以备将来使用。我现在拥有的东西可以在某些PC上使用,而不能在其他PC上使用,我也不知道为什么。
我可以正确使用read命令吗?
#!/bin/bash
# This will clear the screen before displaying the menu.
clear
# Clear Jobs File
echo > jobs.txt
while :
do
# If error exists, display it
if [ "$ERR_MSG" != "" ]; then
echo "Error: $ERR_MSG"
echo ""
fi
# Write out the menu options...
echo " Select an option:"
echo ""
echo " Option 1: Enter Job Name(s)"
echo " Option 2: Display Job Name(s) in File"
echo " Option 3: Job(s) Status"
# Clear the error message
ERR_MSG=""
# Read the user input
read SEL
case $SEL in
1) echo "Paste Job Name(s) and Press "!" Once Done"; read -de "!" jobnames; echo $jobnames > jobs.txt ;;
2) tr ' ' '\n' < jobs.txt ;;
3) sh jobstat.sh;;
4) break ;;
*) ERR_MSG="Please enter a valid option!" ;;
esac
echo ""
echo ""
echo "Press Enter to Retun to Main Menu"
read key
clear
done
答案 0 :(得分:1)
存在问题:
echo "Paste Job Name(s) and Press "!" Once Done"; read -de "!" jobnames; echo $jobnames > jobs.txt
运行此行给出:
read: `!': not a valid identifier
这是因为您使用read -de
。 -d
后应跟定界符e
。因此,!
应该是变量名(标识符)。
-e
选项仅用于 interactive 会话,而并非如此,因此我不知道为什么需要它。放下e
或使用-ed
。
第二,在bash中使用"!"
是危险的,因为!
是事件调用的特殊字符。通常在脚本中这不是问题,但最好将其及其引号转义:
echo "Paste Job Name(s) and Press \"\!\" Once Done";
read -d '!' jobnames;
echo "$jobnames" > jobs.txt # "quotes" to preserve whitespace