读取命令剪切文本

时间:2018-07-23 12:39:09

标签: bash

我有一个菜单脚本,该脚本读取多行文本的输入,有时输入40多个短行(每行是特定作业的名称)。我需要从Windows粘贴功能中读取这些行,并将其存储在文件中以备将来使用。我现在拥有的东西可以在某些PC上使用,而不能在其他PC上使用,我也不知道为什么。

  1. 当我使用SSH Tectia粘贴大量文本时,它会随机剪切输入
  2. 它将在某些使用Putty的PC上而不是在其他PC上接受/读取并保存Windows粘贴命令中的所有行

我可以正确使用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

1 个答案:

答案 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