吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 963|回复: 8
收起左侧

[求助] 【Linux】terminal和shell中cd命令不一样的问题

[复制链接]
jjjzw 发表于 2022-3-26 20:41
本帖最后由 jjjzw 于 2022-3-27 16:52 编辑

这两天在Ubuntu下搭建饥荒(DST)服务器时遇到了一个问题:

服务器启动文件所在路径为:
~/.steam/steamapp/common/Don\'t\ Starve\ Together/bin

在~/路径下建立run.sh
[Shell] 纯文本查看 复制代码
#!/bin/bash
install_dir="/root/.steam/steamapp/common/Don\'t\ Starve\ Together"
cluster_name="Cluster_1"
dontstarve_dir="/root/.klei/DoNotStarveTogether"

function fail()
{
        echo Error: "$@" >&2
        exit 1
}

function check_for_file()
{
         if [ ! -e "$1" ]; then
                    fail "Missing file: $1"
         fi
}

check_for_file "$dontstarve_dir/$cluster_name/cluster.ini"
check_for_file "$dontstarve_dir/$cluster_name/cluster_token.txt"
check_for_file "$dontstarve_dir/$cluster_name/Master/server.ini"
check_for_file "$dontstarve_dir/$cluster_name/Caves/server.ini"
check_for_file "$install_dir/bin"

cd "$install_dir/bin" || fail

run_shared=(./dontstarve_dedicated_server_nullrenderer)
run_shared+=(-console)
run_shared+=(-cluster "$cluster_name")
run_shared+=(-monitor_parent_process $$)
run_shared+=(-shard)

"${run_shared[@]}" Caves | sed 's/^/Caves: /' &
"${run_shared[@]}" Master | sed 's/^/Master: /'

运行
[Shell] 纯文本查看 复制代码
sudo ./run.sh

后报错:无法找到目录/root/.steam/steamapp/common/Don\'t\ Starve\ Together/bin
这时在Terminal中直接运行
[Shell] 纯文本查看 复制代码
cd /root/.steam/steamapp/common/Don\'t\ Starve\ Together/bin

却可以成功进入目录

在网上搜索该问题,得到答案:
运行sh文件后产生一个子shell,执行shell脚本是在子shell上执行的,当shell脚本执行完退出子shell,所以看不到结果应当使用source *.sh

因此我改用
[Shell] 纯文本查看 复制代码
source run.sh

依然出现了同样的报错,并且强制断开了ssh连接
多次尝试后依然失败,最后实在没办法只能将脚本放在bin目录下source,该问题依然没能解决

求问各位大佬这是什么原因导致的,应该怎么解决!

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

ywwlkj 发表于 2022-3-26 21:43
给你顶顶
蜀水一方 发表于 2022-3-26 21:56
Eaglecad 发表于 2022-3-26 23:45
头像被屏蔽
tl;dr 发表于 2022-3-27 06:34
提示: 作者被禁止或删除 内容自动屏蔽
homehome 发表于 2022-3-27 08:59
无法找到目录/root/.steam/steamapp/common/Don\'t\ Starve\ Together/bin
不是已经提醒得很明白了,路径不对。

你看一下路径
 楼主| jjjzw 发表于 2022-3-27 16:30
蜀水一方 发表于 2022-3-26 21:56
export导出一下变量试试

感谢!终于解决了
 楼主| jjjzw 发表于 2022-3-27 16:32
tl;dr 发表于 2022-3-27 06:34
terminal和shell不一样吗?

一开始以为是两者不一样的问题,最终发现这个是变量引起的问题
 楼主| jjjzw 发表于 2022-3-27 16:50
(shell小白)简单又复现了这个问题:
shell/
├── shell2
│   └── shell3 shell
└── test.sh

test.sh
[Shell] 纯文本查看 复制代码
#!/bin/bash
pwd
dir="shell2/shell3\ shell"
pwd
cd "$dir"

出现了同样的问题:cd: ***没有那个文件或目录
修改后
test.sh
[Shell] 纯文本查看 复制代码
#!/bin/bash
pwd
dir=shell2/shell3\ shell
pwd
cd "$dir"

问题解决了(习惯性用python的思维去思考了,过于自由的变量让我踩了大坑
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 16:02

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表