Shell 来自zsh的cd显示错误的cwd名称(~变量)
我有一个shell脚本,它通过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
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.)