Shell脚本无法使用cd命令
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell脚本无法使用cd命令相关的知识,希望对你有一定的参考价值。
参考技术A shell脚本如下,就是一条简单的cd命令:但是执行它却没任何效果。(sh xxx.sh 或者./xxx.sh都不好使)
google了一下,原因:
解决方法:
source脚本即可。
source 命令可以在当前的shell环境下执行脚本,不会创建子shell ,直接影响父进程。
source命令可直接换成 “.”。注意和.sh文件之间有个空格。
即使路径正确,shell 脚本 cd 也会失败
【中文标题】即使路径正确,shell 脚本 cd 也会失败【英文标题】:shell script cd fails even though the path is correct 【发布时间】:2011-10-04 13:55:39 【问题描述】:我需要编写一个脚本来提取指定位置的 tar。
我做了一些简单的事情,比如:
cp test.tar /var/www/html
cd /var/www/html
tar xvf test.tar
如果我手动执行命令一切正常。如果我将它们保存在 .sh 中然后使用 #bash script.sh,我会收到以下错误“:不是目录 cd:/var/www/html”。知道为什么吗?
你的时间。
注意:我在虚拟机(CentOS 5.5)上尝试了脚本版本,脚本运行良好,问题出现在我想使用它的真机上(我使用相同的 OS 磁盘映像,配置与虚拟机...这对我来说真的很奇怪)。
补充:我也尝试调用类似 service mysqld start... 这也失败了,说一个目录不存在(如果我手动运行它仍然有效。)。
【问题讨论】:
如果 'html' 不存在,复制命令会将你的 test.tar 重命名为 'html'。确保它实际上是一个目录,而不是文件的副本。 您是否有机会以其他用户身份运行脚本?尝试在脚本顶部添加“whoami”和“ls -la /var/www”,并将它们提供的输出与直接从命令行运行它们时得到的输出进行比较。 我解决了这个问题(任何人都可以添加这个作为答案吗? - 这很有趣)。我在使用 centos 操作系统的 Windows 上运行的虚拟机上创建了脚本,Windows 中的输入是“\r\n”,而 linux 中的输入是“\n”。该脚本在 vm 上工作,因为 enter 的代码是正确的,而在第二台计算机上,使用本机 linux 它是不正确的。我在 linux 上创建了完全相同的脚本,一切都恢复正常;)。注意... mkdir 部分有效,因为我使用了另一个在 linux 上编写的简化脚本。 【参考方案1】:看起来您的 cp
可能正在将 test.jar 复制到 www 目录下的 file html。在尝试 cp 之前,请确保 html 存在并且是一个目录。
mkdir -p /var/www/html
cp test.tar /var/www/html
cd /var/www/html
tar xvf test.tar
【讨论】:
cd 给出该错误消息的唯一方法是目标不是目录 脚本好像创建了一个叫html的文件? (甚至认为 html 存在)并试图复制它......这解决了一半的问题(下半部分更新)【参考方案2】:我解决了这个问题——这很有趣)。
我在使用centos os 的windows 上运行的虚拟机上创建了脚本,windows 中的输入是“\r\n”,而linux 中的输入是“\n”。
该脚本在 vm 上运行,因为 enter 的代码是正确的,而在第二台计算机上,使用本机 linux,它是不正确的。我在 linux 上创建了完全相同的脚本,一切都恢复正常;)。
注意... mkdir 部分有效,因为我使用了另一个在 linux 上编写的简化脚本。
【讨论】:
【参考方案3】:在相关说明中,我发现“~”字符在 bash 中似乎不起作用,因此如果您正在使用它,请尝试将其替换为完整路径。
【讨论】:
谢谢。这就是我遇到的。一个可能的解决方案是仅当场将 ~ 替换为 $HOME (以防您无法更改数据源): cd $DirectoryString/#\~/$HOME 在什么发行版和版本中,'~' 似乎在 bash 中不起作用?也许$HOME
增加了可读性,但 '~' 确实适用于我所知道的所有 bash 版本和发行版。 (gnu.org/software/bash/manual/html_node/Tilde-Expansion.html)以上是关于Shell脚本无法使用cd命令的主要内容,如果未能解决你的问题,请参考以下文章