【问题标题】:Running file from ssh connection doesn't work correctly. File got executed correctly only with direct connection从 ssh 连接运行文件无法正常工作。只有通过直接连接才能正确执行文件
【发布时间】:2013-06-28 07:26:43
【问题描述】:

这个话题很混乱,我知道。我真的不能说我的问题是什么。 简而言之,我将解释发生了什么 - 我有一个 AWS(亚马逊网络服务),其中我有 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 

然后从服务器运行它。谁能解释我为什么它会这样工作? 我理解它可能仍然令人困惑,但我希望这个屏幕截图有助于理解这一点。感谢您阅读这篇长文!我希望你知道答案。

【问题讨论】:

    标签: linux node.js shell ubuntu ssh


    【解决方案1】:

    通过ssh 和在shell 中执行命令的方式有一个基本的区别。

    在 shell 中,你说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
    

    从外壳。

    【讨论】:

      【解决方案2】:

      当你 ssh 到服务器时,shell 做的第一件事就是读取所有的环境文件(.profile、.bashrc、.kshrc 等)。但是,在执行远程命令时,不会发生这种情况。在执行之前尝试获取所需的 env 文件,例如:

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

      可能还需要使用 . ./.profile; . ./.bashrc;. ./.profile; . ./.kshrc;,具体取决于您使用的 shell 以及这些文件是否也具有 env(主要是 PATH)设置。

      【讨论】:

        猜你喜欢
        • 2017-08-16
        • 2019-08-01
        • 2014-09-16
        • 1970-01-01
        • 2016-04-23
        • 2018-04-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多