Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 来自zsh的cd显示错误的cwd名称(~变量)_Shell_Unix_Zsh - Fatal编程技术网

Shell 来自zsh的cd显示错误的cwd名称(~变量)

Shell 来自zsh的cd显示错误的cwd名称(~变量),shell,unix,zsh,Shell,Unix,Zsh,我有一个shell脚本,它通过zsh中的别名运行,使用alias wd=“./path/to/wd”。脚本执行一个ruby程序,并将cds输出到该程序。它可以工作,但在执行cd命令后,目录显示为“~result”,而不是其实际名称 shell脚本的简化版本如下 #!/bin/sh result=$(ruby engine.rb $*) cd $result 这显然与cd使用变量“result”有关,因为这是它得到的名称 如果更改到另一个目录并返回,仍然使用错误的名称 这是一个正常工作的bas

我有一个shell脚本,它通过
zsh
中的别名运行,使用
alias wd=“./path/to/wd”
。脚本执行一个
ruby
程序,并将
cd
s输出到该程序。它可以工作,但在执行
cd
命令后,目录显示为“~result”,而不是其实际名称

shell脚本的简化版本如下

#!/bin/sh

result=$(ruby engine.rb $*)
cd $result
这显然与cd使用变量“result”有关,因为这是它得到的名称

如果更改到另一个目录并返回,仍然使用错误的名称


这是一个正常工作的
bash
,因此这是一个
zsh
问题。

这似乎是使用静态命名目录的情况。由于
result
的值是一个以
/
开头的路径,因此
zsh
使用该变量作为路径的“名称”,并在提示中显示完整路径时对其进行缩写。有关详细信息,请参见“静态命名目录”下的
manzshexpn

这似乎是使用静态命名目录的情况。由于
result
的值是一个以
/
开头的路径,因此
zsh
使用该变量作为路径的“名称”,并在提示中显示完整路径时对其进行缩写。有关详细信息,请参见“静态命名目录”下的
manzshexpn

这是由
自动命名目录
选项(默认情况下未启用)引起的:

换句话说,每当您执行以下操作时,启用
AUTO\u NAME\u DIRS
project=/path/to/my/project
~project
成为
/path/to/my/project
的缩写。 这使您可以执行类似于
cd~project
ls-lh~project
的操作,作为该目录的快捷方式

如果您不喜欢目录在提示符中显示为
~project
,您可以 将提示符中的
%~
替换为
%d
,以始终显示完整路径

如果您根本不希望出现这种行为,请在配置中执行
unsetopt AUTO\u NAME\u DIRS


如果要保持该选项处于启用状态,但在脚本中禁用该选项,以使
result
不成为命名目录,请在脚本顶部执行
emulate-LR zsh
。这会在脚本运行时将所有选项临时重置为默认值。在脚本中始终使用
emulate-LR zsh
是最好的做法,以防止此类奇怪的事情发生。这比事后进行
unhash-d result
修复要好。

这是由
AUTO\u NAME\u DIRS
选项(默认情况下未启用)造成的:

换句话说,每当您执行以下操作时,启用
AUTO\u NAME\u DIRS
project=/path/to/my/project
~project
成为
/path/to/my/project
的缩写。 这使您可以执行类似于
cd~project
ls-lh~project
的操作,作为该目录的快捷方式

如果您不喜欢目录在提示符中显示为
~project
,您可以 将提示符中的
%~
替换为
%d
,以始终显示完整路径

如果您根本不希望出现这种行为,请在配置中执行
unsetopt AUTO\u NAME\u DIRS


如果要保持该选项处于启用状态,但在脚本中禁用该选项,以使
result
不成为命名目录,请在脚本顶部执行
emulate-LR zsh
。这会在脚本运行时将所有选项临时重置为默认值。在脚本中始终使用
emulate-LR zsh
是最好的做法,以防止此类奇怪的事情发生。这比事后做
unhash-d result
修复要好。

目录“显示”在哪里?不,我是问你什么意思。哈哈!该目录在终端提示中显示了错误的名称。在我的例子中,它显示的是
simon~result$
目录“show”在哪里?不,我是问你什么意思。哈哈!该目录在终端提示中显示了错误的名称。在我的例子中,它显示
simon~result$
该手册页是巨大的!你知道我应该接受这个结论还是有可能解决问题吗?你可以用
hash-d result
从命名目录哈希表中删除
result
。太棒了!解决方案是删除
unhash-d结果
该手册页太大了!你知道我应该接受这个结论还是有可能解决问题吗?你可以用
hash-d result
从命名目录哈希表中删除
result
。太棒了!解决方案是使用
unhash-d结果删除
perfect,我使用
%d
作为提示
unsetopt AUTO\u NAME\u DIRS
没有真正起作用。很好,我使用了
%d
作为提示<代码>取消选择自动\u名称\u目录
实际上不起作用。
         AUTO_NAME_DIRS

         Any parameter that is set to the absolute name of a directory
         immediately becomes a name for that directory, that will be used
         by the `%~' and related prompt sequences, and will be available
         when completion is performed on a word starting with `~'.
         (Otherwise, the parameter must be used in the form `~param' first.)