在 Zsh 中,从cd
到~/foo/bar/aaa/bbb/ccc
,~/foo/bar/zzz/bbb/ccc
我可以输入cd aaa zzz
,就这样。我仔细阅读了 Fishcd
手册页,但我仍然不明白:那里是否也可以做同样的事情?
我在一个符号链接的目录中
me@hostname:/home/me$ ls -al
the_link -> actual_a
actual_a
actual_b
actual_c
me@hostname:/home/me$ cd the_link
me@hostname:/home/me/the_link$
现在,当我打开 shell 时,其他一些进程将符号链接从the_link -> actual_a
to更改为the_link -> actual_b
,甚至可能更改为rm -rf actual_a
. 如果我在我的 shell 中运行一个命令,它会做一些奇怪的事情。有没有办法告诉cd
“re-cd”进入我所在的目录?
显然我可以
me@hostname:/home/me/the_link$ cd ..
me@hostname:/home/me$ cd the_link
但我可以在一个命令中完成吗?
根据我的经验,我看到的“xargs”行为似乎非常出乎意料。我使用“ls”查找匹配的文件夹名称并使用“xargs”将其发送到“cd”。我收到该文件夹不存在的消息。但是,如果我不使用“xargs”,则“cd”可以工作。此外,如果我确实使用“xargs”但将其发送到“ls”而不是“cd”,它也可以工作。
# Identify desired directory
ls -d *[Aa]nt*
201909+ants/
# Print the desired command with "echo"
ls -d *[Aa]nt* | xargs echo cd
cd 201909+ants/
# Execute the desired command and get error
ls -d *[Aa]nt* | xargs cd
xargs: cd: No such file or directory
# Confirm that the desired command without "xargs"
cd 201909+ants # This works no problem
cd .. # Go back up
cd 201909+ants/ # This works no problem
cd .. # Go back up
# Confirm that "xargs" with "ls"
ls -d *[Aa]nt* | xargs ls -d
201909+ants/
我确信这是键盘和椅子之间的 ID1OT 问题。谁能指出我的错误在哪里?
我正在使用 Cygwin 的 Bash,但我很少看到与 Linux 的差异。我不记得我上一次看到这样的差距是什么时候了。
我知道它cd
用于在 linux 命令行中的文件之间导航。但是,我不确定在尝试复制某些内容时遇到的以下内容是什么意思:
cd ../..
之前是
bash get_data.sh
请建议。谢谢!
的输出jobs
看起来像这样
[1] Stopped TERM=xterm-256color vim --servername vim ~/.gitconfig
[2]- Stopped TERM=xterm-256color vim --servername vim ~/.vimrc (wd: ~)
[3]+ Stopped TERM=xterm-256color vim --servername vim i3blocks.conf (wd: ~/.config/i3/configs)
其中部分(如果存在)显示相应作业开始的目录。(wd: path)
path
有几次我想搬到那个目录来做一份工作。
有这样做的实用程序吗?
我正在使用 Ubuntu,有时当我使用时,cd -
我不会进入上一个目录。每次我得到它cd
编辑的目录时。例子:-
$cd -
/home/[usrname]/Downloads
$cd -
/home/[usrname]/Downloads
是(/是)那里和替代品吗?
我想将一个目录推送到目录堆栈上,以便使用“波浪号速记”来引用它(例如,~1
指的是目录列表中的第二个条目),但我不想实际切换到该目录。在 bash 中,这似乎可以使用-n
标志来完成pushd
。
zsh中的等价物是什么?
我写了一个小脚本,可以让我切换到路径上的脚本目录,这有助于我快速找到我想要编辑的其他脚本,与原始脚本位于同一文件夹中。
我倾向于通过回顾历史来做到这一点,并为该命令加上前缀,无论它是什么,就像这样
$ . cdbin my_super_script
这在大多数情况下都有效 - 但是 - 当我运行的最后一个命令在某处通过管道传输时,它不起作用,
例如
# if my last command was the following
$ my_super_script | grep -v bad | grep good
# then when I try and run my cdbin script using history, it looks like this
$ . cdbin my_super_script | grep -v bad | grep good
然后它什么也没做 - 没有错误,它只是让我留在我的当前目录中。
这是我的简单cdbin
脚本:
cdbin
PROG=$(which "$1")
DIR=$(dirname "$PROG")
cd "$DIR"
编辑:请注意,我知道我可以在大多数情况下简单地输入类似以下内容来避免这种情况,例如,$ . cdbin !:0
但发现输入有点尴尬:D
我将用户切换到 root used su
。但我仍然不能cd /etc/group
,但组文件夹在我的 /etc 文件夹中。
root@Desktop:/etc# cd group
bash: cd: group: Not a directory
我有一个功能,我希望它能让我对我一直在查看的最新目录进行模糊搜索并节省我的时间,一个简单的 1 班轮:
dirs | sed 'y/ /\n/' | fzf | xargs cd
2小时后,我无法弄清楚出了什么问题):
我不断收到以下错误:
/usr/bin/cd: line 4: cd: ~/Downloads/demo: No such file or directory
即使目录确实存在,无论我做什么。cd怎么了,为什么这不起作用?
感谢您的评论:更多信息 我尝试了其他一些方法,例如编写函数:
fdr() {
local dir
dir=`dirs | sed 'y/ /\n/' | fzf`
cd $dir
}
即使dir
具有正确的值,我也会得到与上面相同的错误。
我的最终功能
感谢您的帮助,子壳正在使我头疼,这是我的最终答案,有点骇人听闻,但是这些天不是。
fdr() {
local dir
myusernmae=`whoami`
dir=`dirs | sed 'y/ /\n/' | sed "s/~/\/Users\/$myusernmae/g" | fzf +m`
cd "$dir"
}