直接输入bash操作

时间:2015-05-17 10:10:31

标签: bash parsing

我正在运行命令

while IFS= read -r file;do split -l 20000 -d "$file" "$file";done < file.list.txt

接受包含表格

的文件列表的文本文件(file.list.txt)作为输入
job1
job2

我需要一个接受单个输入文件的命令。但如果我写

while IFS= read -r file;do split -l 20000 -d "$file" "$file";done < job1

我只打印出标准文件。如何使该命令接受单个文件而不是文件列表?

3 个答案:

答案 0 :(得分:1)

简单地

split -l 20000 -d job1 job1

应与

相同
while IFS= read -r file;do split -l 20000 -d "$file" "$file";done < file.list.txt

file.list.txt仅包含

job1

答案 1 :(得分:1)

重定向操作符接受一个文件名来打开并从中读取输入。

command <file

要接受单个字符串,Bash 3.x有一个叫做“here string”的东西:

command <<<"string"

或者您可以使用管道:

echo "string" | command

所以对于你的问题,试试

echo "job1" |
while IFS= read -r file; do
    split -l 20000 -d "$file" "$file"
done

为了完整起见,也可以在这里提一下文件:

while read file; do
    split -l 20000 -d "$file" "$file"
done <<'____HERE'
    job1
____HERE

允许您在<<和终止heredoc分隔符之间的脚本中放置一个“伪文件”。

答案 2 :(得分:0)

在这种情况下,只需使用变量来保存输入文件名:

file='job1'
split -l 20000 -d "$file" "$file"

您可以使用brace expansion保存一些按键:

file='job1'
split -l 20000 -d "$file"{,}
  • "$file"{,}有效加倍 $file,有效地产生与上述相同的命令。