0

このトピックは紛らわしいです、私は知っています。私の問題が何であるかを本当に言うことはできません。何が起こっているのかを簡単に説明します - AWS (Amazon Web サービス) があり、そこに node.js と次のようなスクリプトがあります:

#!/usr/bin/env node
var fs = require('fs');
var outfile = "slogan.txt";
var text = "A startup is a business built to grow rapidly.\n";
fs.writeFileSync(outfile,text);
console.log("Script: " + __filename + "\nWrote: " + text + "To: " + outfile);

かなり単純ですよね?涼しい!パソコンから実行したいのでそのようにしています

ssh host1 node week2/part1.js

ここで、host1 は 100% 正常に機能し、MAC と AWS の間で .pem と接続されています。スクリプトが実行されました:

Bitmakers-iMac:~ Bitmaker$ ssh host1 node week2/part1.js
Script: /home/ubuntu/week2/part1.js
Wrote: A startup is a business built to grow rapidly.
To: slogan.txt

しかし... slogan.txtがありません! サーバー内で接続する必要があります

ssh host1 

次に、サーバーから実行します。なぜそのように機能するのか、誰でも説明できますか?まだわかりにくいかもしれませんが、このスクリーンショットがこれを理解するのに少し役立つことを願っています. この長い投稿を読んでくれてありがとう!あなたが答えを知っていることを願っています。 ここに画像の説明を入力

4

2 に答える 2

3

シェル内でコマンドを実行する方法とシェル内からコマンドを実行する方法には、基本的な違いがありsshます。

シェル内から、言っcd week2てから発行するのnode part1.jsに対しssh host1 node week2/part1.js、他の場合は発行します。このファイルslogan.txtは、 を含むディレクトリ内にpart1.jsあり、 と言ったときに見つけることができませんnode week2/part1.js

次の行を変更します

var outfile = "slogan.txt";

代わりに完全なパスを指定しますslogan.txt

試してみると、問題を再現できます

cd ~ && node week2/part1.js

シェルから。

于 2013-07-01T08:24:42.457 に答える
1

サーバーに SSH で接続すると、シェルは最初にすべての環境ファイル (.profile、.bashrc、.kshrc など) を読み取ります。ただし、リモート コマンドを実行する場合、これは発生しません。実行する前に、必要な env ファイルを取得してみてください。次に例を示します。

ssh host ". ./.profile; node week2/part1.js"

. ./.profile; . ./.bashrc;またはを使用する必要がある場合もあり. ./.profile; . ./.kshrc;ます。使用するシェルと、それらのファイルに env (主に PATH) 設定も含まれているかどうかによって異なります。

于 2013-07-01T08:20:55.163 に答える