我有一个简单的脚本:
#!/bin/bash
for server in $(~/.ansible/ansible_hosts)
do
ssh $server "hostname; readlink /opt/mydir/mylink;"
done
它工作正常-程序返回正确的主机名和链接-除了我在一些但不是所有服务器上得到以下错误:
shell-init:检索当前目录时出错:getcwd:无法访问父目录:无此文件或目录
所有目录都存在。最常见的建议之一是添加cd、cd-或cd /。添加该步骤时所发生的一切都是额外的:
chdir:检索当前目录时出错:getcwd:无法访问父目录:无此文件或目录
我试着启动nfs守护进程,以防我的homedir有一些混乱,并替换了/etc/init.d,以防问题出在/opt上。无差异
这只是一个烦恼,除了当我尝试使用一个ansible playbook而不是一个简单的ssh命令时,它会在该服务器上失败。
任何见解将不胜感激。
9条答案
按热度按时间f45qwnt81#
我认为这个错误与剧本无关。问题是:当您尝试运行脚本时所在的目录不再存在。例如,你有两个终端,
cd somedir/
在第一个,然后mv somedir/ somewhere_else/
在第二个,然后尝试运行无论在第一个终端-你会收到这个错误消息。请注意,即使您重新创建同名目录,也会出现此错误,因为新目录将具有不同的inode索引。
至少这是在我的情况下。
knpiaxh12#
在Mac上,只需杀死并重新启动终端。它会得到它的权利。
kcugc4gi3#
根据this answer,它发生在“你重新创建目录”,但在这个位置已经有一个shell,所以我们可以简单地运行:
注意:如果您使用的是zsh并且最终处于这种状态,您可能会在提示符的开头看到一个锁图标🔒(这通常表示您没有写权限)。
py49o6xq4#
在mac终端上打开一个新标签对我很有效。
idv4meu85#
我在我的
unittest
中有同样的错误在我的tearDown
方法中,我正在为我的测试用例创建和删除测试文件。奇怪的是,即使我有我想通过for循环删除的目录的完整路径,我也必须在之前提供os.chdir(path_where_dirs_at)
来消 debugging 误。不知道这是否是一个好的解决方案,但消息消失了。v7pvogib6#
您正在将此作为脚本执行。$(~/.ansible/ansible_hosts)。$()表示bash将尝试执行该脚本,然后输出结果。
但这不是剧本,对吧?这是一个主机列表!
只要加上单词
cat
,它就应该工作了。0ejtzxu17#
我在Colab suddenly unable to navigate through directories中找到了类似问题的解决方案
不丢失Colab示例中的变量,
使用操作系统库更改目录。
这个解决方案可以工作,并且不需要重新启动运行时(并丢失所有数据)。
njthzxwz8#
也许是因为第一行“#!/bin/bash”.尝试其他方法,例如:#!/bin/ksh
2jcobegt9#
杀死终端和重新启动工作对我太!