shell-init:检索当前目录时出错:getcwd --通常的修复不起作用

osh3o9ms  于 2023-06-06  发布在  Shell
关注(0)|答案(9)|浏览(388)

我有一个简单的脚本:

#!/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命令时,它会在该服务器上失败。
任何见解将不胜感激。

f45qwnt8

f45qwnt81#

我认为这个错误与剧本无关。问题是:当您尝试运行脚本时所在的目录不再存在。例如,你有两个终端,cd somedir/在第一个,然后mv somedir/ somewhere_else/在第二个,然后尝试运行无论在第一个终端-你会收到这个错误消息。
请注意,即使您重新创建同名目录,也会出现此错误,因为新目录将具有不同的inode索引。
至少这是在我的情况下。

knpiaxh1

knpiaxh12#

在Mac上,只需杀死并重新启动终端。它会得到它的权利。

kcugc4gi

kcugc4gi3#

根据this answer,它发生在“你重新创建目录”,但在这个位置已经有一个shell,所以我们可以简单地运行:

cd ~ && cd -

注意:如果您使用的是zsh并且最终处于这种状态,您可能会在提示符的开头看到一个锁图标🔒(这通常表示您没有写权限)。

py49o6xq

py49o6xq4#

在mac终端上打开一个新标签对我很有效。

idv4meu8

idv4meu85#

我在我的unittest中有同样的错误在我的tearDown方法中,我正在为我的测试用例创建和删除测试文件。奇怪的是,即使我有我想通过for循环删除的目录的完整路径,我也必须在之前提供os.chdir(path_where_dirs_at)来消 debugging 误。不知道这是否是一个好的解决方案,但消息消失了。

v7pvogib

v7pvogib6#

您正在将此作为脚本执行。$(~/.ansible/ansible_hosts)。$()表示bash将尝试执行该脚本,然后输出结果。
但这不是剧本,对吧?这是一个主机列表!
只要加上单词cat,它就应该工作了。

#!/bin/bash
for server in $(cat ~/.ansible/ansible_hosts)
do
    ssh $server "hostname; readlink /opt/mydir/mylink;"
done
0ejtzxu1

0ejtzxu17#

我在Colab suddenly unable to navigate through directories中找到了类似问题的解决方案

不丢失Colab示例中的变量,

使用操作系统库更改目录。

import os
path = "/content" # /content is pretty much the root. you can choose other path in your colab workspace
os.chdir(path)

这个解决方案可以工作,并且不需要重新启动运行时(并丢失所有数据)。

njthzxwz

njthzxwz8#

也许是因为第一行“#!/bin/bash”.尝试其他方法,例如:#!/bin/ksh

2jcobegt

2jcobegt9#

杀死终端和重新启动工作对我太!

相关问题