SQLiteコマンド ".import"はどのように標準入力から直接読み取られますか?

SQLiteコマンド

関数をどのように修正csv_to_sqliteするかsqlite3注文する.import一時的な名前付きパイプではなく標準入力から直接読みますか?

#!/bin/bash

function csv_to_sqlite() {
  local database_file_name="$1"
  local table_name="$2"
  local temp_input_fifo=$(mktemp -u)
  mkfifo $temp_input_fifo
  sqlite3 -csv $database_file_name ".import $temp_input_fifo $table_name" &
  cat > $temp_input_fifo
  rm $temp_input_fifo
}

database_file_name=$1
table_name=$2

csv_to_sqlite "$database_file_name" "$table_name"
$ printf "col1,col2,col3\na,1,2.6\nb,2,5.4\n" | ./csv_to_sqlite test.sqlite test
$ sqlite3 -csv -header test.sqlite "SELECT * FROM test"
col1,col2,col3
a,1,2.6
b,2,5.4

ベストアンサー1

まだ使用中の他のソリューションを見つけました。sqlite3 .importただし、これは読み取りまたは一時的に名前付きパイプを読み取りません/dev/stdin。代わりに、次.importを使用します。パイプラインオペレータ呼び出しはcat -標準入力から直接読み取られます。

#!/bin/bash

function csv_to_sqlite() {
  local database_file_name="$1"
  local table_name="$2"
  sqlite3 -csv $database_file_name ".import '|cat -' $table_name"
}

database_file_name=$1
table_name=$2

csv_to_sqlite "$database_file_name" "$table_name"

おすすめ記事