如何在Bash中将输入作为重定向从程序中读取?

如何在Bash中将输入作为重定向从程序中读取?,bash,Bash,我试图在bash中读取文件的输入,但由于CSV中的头行,我想放弃文件的第一行。tail-n+2“${csv}”本身可以工作,但是当使用时,这里的简单答案是使用: …或者(如果您试图为POSIX sh或没有类似功能的shell编写此代码,您可能会这样做): tempdir=$(mktemp-t-d csvpipe.d.XXXXXX) mkfifo“$tempdir/csvpipe.tmp” 尾部-n+2“$csv”>“$tempdir/csvpipe.tmp”& 虽然完成这里简单的答案是使用: …

我试图在bash中读取文件的输入,但由于CSV中的头行,我想放弃文件的第一行。
tail-n+2“${csv}”
本身可以工作,但是当使用
时,这里的简单答案是使用:

…或者(如果您试图为POSIX sh或没有类似功能的shell编写此代码,您可能会这样做):

tempdir=$(mktemp-t-d csvpipe.d.XXXXXX)
mkfifo“$tempdir/csvpipe.tmp”
尾部-n+2“$csv”>“$tempdir/csvpipe.tmp”&

虽然完成这里简单的答案是使用:

…或者(如果您试图为POSIX sh或没有类似功能的shell编写此代码,您可能会这样做):

tempdir=$(mktemp-t-d csvpipe.d.XXXXXX)
mkfifo“$tempdir/csvpipe.tmp”
尾部-n+2“$csv”>“$tempdir/csvpipe.tmp”&

虽然完成而不是使用
tail
,直接从文件中读取,但使用复合命令(
{…}
和两个
read
s放弃前两行

{ read; read;
  while IFS=, read ...; do
      ...
  done
} < "$csv"
{read;read;
当IFS=,读…;做
...
完成
}<“$csv”

不要使用
tail
,直接从文件中读取,而是使用一个复合命令(
{…}
和两个
read
来丢弃前两行

{ read; read;
  while IFS=, read ...; do
      ...
  done
} < "$csv"
{read;read;
当IFS=,读…;做
...
完成
}<“$csv”

@EtanReisner,呃,这是进程替换,不是命令替换。@EtanReisner,呃,这是进程替换,不是命令替换。你为什么不使用
read-a
将所有内容填充到一个数组中,而不是一组单独命名的变量?我想将它们拆分到不同的数组中,以便于使用在这个问题中没有显示的附加代码中使用se。可能有一种更简单的方法来编写附加代码,而不是在每列中处理一组单独命名的变量。也就是说,其中一些更简单的方法需要bash 4.3,因此我无法给出没有详细信息的结论性答案。您不使用
read-a
要将所有内容塞入一个数组而不是一组单独命名的变量?我想将它们分成不同的数组,以便于在本问题中未显示的其他代码中使用。编写这些额外代码可能比在每列中处理一组单独命名的变量更简单。也就是说,有些在这些更简单的方法中,有一种需要bash4.3,因此如果没有细节,我无法给出一个结论性的答案。
while ... done < <(tail -n+2 "$csv")
tail -n+2 "$csv" >/dev/fd/63 &
while ... done < /dev/fd/63
tempdir=$(mktemp -t -d csvpipe.d.XXXXXX)
mkfifo "$tempdir/csvpipe.tmp"
tail -n+2 "$csv" >"$tempdir/csvpipe.tmp" &
while ... done <"$tempdir/csvpipe.tmp"
rm -rf "$tempdir"
{ read; read;
  while IFS=, read ...; do
      ...
  done
} < "$csv"