2017-07-19 6 views
0

私はターミナルにシェルスクリプトを書くことを学んでいます。私はnpm initプロセスを自動化しようとしています。ちょうど練習のためです。だから、私は端末からすべてのパラメータを読み込み、npm initを自動的に実行しようとします。ただし、npm initがエントリポイントを要求すると、プロセスは常に中止されます。入力キーを押すか、変数を使用してシミュレーションを行うために空白行を残しておけば、どこでもうまく動作します。なぜその時点で終了するのですか?シェルスクリプト入力がnpm initのために機能しない

read -p "Project name: " name; 
read -p "Version: " version; 
read -p "Project description: " description; 
read -p "Entry point: " entryPoint; 
read -p "Test command: " testCommand; 
read -p "Git repository: " gitRepo; 
read -p "Keywords: " keywords; 
read -p "Author: " author; 
read -p "License: " license; 
read -p "Is this okay?: " isOkay; 

npm init <<! 
$name 
$version 
$description 
$entryPoint 
$testCommand 
$gitRepo 
$author 
$license 
$isOkay 
! 

ターミナル入力し、結果のスクリプトを実行している:

Project name: name 
Version: 1.0.0 
Project description: description 
Entry point: app.js 
Test command: 
Git repository: 
Keywords: 
Author: Author 
License: ISC 
Is this okay?: yes 
This utility will walk you through creating a package.json file. 
It only covers the most common items, and tries to guess sensible defaults. 

See `npm help json` for definitive documentation on these fields 
and exactly what they do. 

Use `npm install <pkg> --save` afterwards to install a package and 
save it as a dependency in the package.json file. 

Press ^C at any time to quit. 
name: (node) name 
version: (1.0.0) 1.0.0 
description: description 
entry point: (index.js) 

そして、それはそれです。毎回エントリポイントで終了します。

答えて

0

これはなぜ動作しないのかわかりませんが、プログラムはstdinを直接使用せずにユーザー入力を読み取ることができます。 npmがこのカテゴリに入る可能性があります。

このような場合、テキストをプロンプトに渡すソリューションは、expectコマンドを使用することです。

read -p "Project name: " name; 
read -p "Version: " version; 
read -p "Project description: " description; 
read -p "Entry point: " entryPoint; 
read -p "Test command: " testCommand; 
read -p "Git repository: " gitRepo; 
read -p "Keywords: " keywords; 
read -p "Author: " author; 
read -p "License: " license; 
read -p "Is this okay?: " isOkay; 


/usr/bin/expect <<! 

spawn npm init 
expect "package name:" 
send "$name\n" 
expect "version:" 
send "$version\n" 
expect "description:" 
send "$description\n" 
expect "entry point:" 
send "$entryPoint\n" 
expect "test command:" 
send "$testCommand\n" 
expect "git repository" 
send "$gitRepo\n" 
expect "keywords:" 
send "$keywords\n" 
expect "author:" 
send "$author\n" 
expect "license:" 
send "$license\n" 
expect "Is this ok?" 
send "$isOkay\n" 
expect eof 
! 
echo "DONE!" 
+0

興味深い。これは動作します - ありがとう。 'spawn npm init'の直後に約10秒の遅延があります。どんな考え? – cweber105

関連する問題