【问题标题】:Command doesn't work in script, but works in shell命令在脚本中不起作用,但在 shell 中起作用
【发布时间】:2010-12-30 05:13:47
【问题描述】:

我正在编写一个使用 SSH“配置文件”的脚本,~/scripts/ssh-profiled.sh

PROFILE=`cat ~/script/ssh-profiles/$1`
echo [ssh $PROFILE]
ssh $PROFILE

~/scripts/ssh-profiles/tummi

-i ~/Dropbox/security/key-nopass/key-nopass.pvt bart@example.com

当我运行脚本时,它失败了:

bart@bart-laptop:~$ script/ssh-profiled.sh tummi
[ssh -i ~/Dropbox/security/key-nopass/key-nopass.pvt bart@example.com]
Warning: Identity file ~/Dropbox/security/key-nopass/key-nopass.pvt not accessible: No such file or directory.
bart@example.com's password:

但这有效:

bart@bart-laptop:~$ ssh -i ~/Dropbox/security/key-nopass/key-nopass.pvt bart@example.com
Linux tummi 2.6.32-24-server #39-Ubuntu SMP Wed Jul 28 06:21:40 UTC 2010 x86_64 GNU/Linux
Ubuntu 10.04.1 LTS

Welcome to the Ubuntu Server!

我的脚本中有错误/陷阱吗?

【问题讨论】:

  • 作为实验,将echo ~ 添加到脚本的某处。
  • 任何实验都是有用的尝试,但你会看到一个只会让你更加困惑〜扩展到主目录但扩展仍然不适用于 ssh。请参阅 Victor 用“eval”回答的原因。

标签: linux bash scripting ubuntu ssh


【解决方案1】:

将第一行改为

eval PROFILE=`cat ~/script/ssh-profiles/$1`

解释见here

【讨论】:

  • 打败我。另一种选择是“eval ssh $PROFILE”,这就是我要回答的方式。
【解决方案2】:

文件中的 ~ 必须是完整的主目录路径,它不会被扩展。

【讨论】:

    【解决方案3】:

    我的猜测是“~/”在以这种方式传递时没有被解释为预期的那样。尝试使用显式完整路径。

    【讨论】:

      【解决方案4】:

      .pvt 文件的权限是什么?如果只有您具有读取权限,并且没有人可以执行它,那么您的脚本可能甚至无法看到该文件。这可能就是您收到"...not accessible: No such file or directory." 消息的原因。

      【讨论】:

      • “没有这样的文件或目录”(ENOENT)不是权限错误(EACCES)。
      最近更新 更多