【问题标题】:change directory is not working through script but working directly on machine更改目录不是通过脚本工作,而是直接在机器上工作
【发布时间】:2020-08-21 16:50:42
【问题描述】:

我正在尝试通过执行 ssh 的脚本运行此命令,它只执行 cd 命令。

cd $(ls | tail -1)

当它直接在机器上工作时。

【问题讨论】:

  • 你到底想做什么?闻起来像 XY 问题
  • 试图通过脚本进入目录
  • 你对改变的目录做了什么?工作目录仅对单个进程有效。当该过程结束时,工作目录被重新设置。这也适用于子外壳和脚本执行。当您运行 ./script.sh 时,脚本 #!/bin/sh cd directory 不会按照您的预期执行,您需要获取它 (. script.sh)

标签: linux shell unix scripting


【解决方案1】:

我可以在这里假设,但你引用正确吗?当您运行 ssh user@host cd $(ls | tail -1) 时,命令替换是在客户端而不是服务器上执行的。

你必须使用:

ssh user@host 'cd $(ls | tail -1)'

也就是说,您的命令不会做任何事情。 cd 会更改服务器上的工作目录,然后终止 ssh 会话。

【讨论】:

  • 嗨,是的,我引用正确,因为我在多台机器上执行 ssh 我已经在列表中提到了它们 >>> ssh -n $file " pwd ; cd $(ls | tail -1 ) ;pwd" .....这就是我使用它的方式,所以 ssh 似乎没有问题
  • 使用 "…" 而不是 '…' 仍会评估本地计算机上的命令替换
  • 我又使用了一个不带 $ 的 cd 命令,只需添加一个路径 cd abc/xyz 它正在工作,但不是这个
  • Cd abc/xyz ;pwd ; cd $(ls |tail -1);pwd ... 第一个 pwd 给出了正确的结果,如 abc/xyz 但第二个是带我回到主目录,而不是在 xyz 路径中最底层的目录中进行
  • 你确定吗?我刚刚尝试过,它可以工作,即使使用命令替换和管道。必须使用单引号 '…' 而不是双引号 "…",因为双引号仍会插入变量和替换命令。
猜你喜欢
  • 2010-10-13
  • 1970-01-01
  • 2015-07-24
  • 1970-01-01
  • 1970-01-01
  • 2012-09-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-19
相关资源
最近更新 更多