我想将 which 命令的输出和 cd 带到父目录。例如,假设我有以下内容:
which someprogram
Run Code Online (Sandbox Code Playgroud)
有输出:
/home/me/somedirectory/someprogram
Run Code Online (Sandbox Code Playgroud)
我想 cd 到某个程序所在的目录:
cd /home/me/somedirectory
Run Code Online (Sandbox Code Playgroud)
我想在一行中完成此操作。最优雅、最棘手、最简短的方法是什么?
可能的重复:
在进入目录时执行 bash 脚本
我正在运行一个需要一些非常具体的工具版本的环境。设置环境的命令位于名为set_foo_env.sh
假设我有一个目录~/repository/foo/。set_foo_env.sh一进入foo目录就可以运行吗?
有时在访问各种目录时,大多数情况下我会记住我们 Linux 系统下目录的名称或至少部分名称。但是有些目录以第一个字符大写或名称中间的一个字符开始命名为大写。
任何人都可以建议我如何在cd命令 case INSENSITIVE之后设置参数,这样如果我执行cd BackupDirectory或cd backupdirectory它可以输入目录名称 BackupDirectory。
当然,我不想为其他用户搞砸,所以如果上述是可能的,那么更改是否可能仅应用于我正在使用的会话而不影响其他用户?
好的,我试过了 set completion-ignore-case,但这不起作用。如果我输入cd b和/Tab或Esc Esc填充目录名称而忽略大小写,它只会有所帮助。但是,我需要的是,如果我执行 a cd backupdirectory,它只会忽略大小写并BackupDirectory自行进入。
运行 kornshell 并尝试遍历目录树。想cd到一个如下命名的子目录:
-3ab_&_-3dc.img
Run Code Online (Sandbox Code Playgroud)
我的问题是我需要如何转义此名称中的&符号?我尝试了双引号和反斜杠的不同组合,但没有成功。
我会发现能够cd与文件参数一起使用非常方便。
cd myDirectory/anyname.anyExtension
将相当于
cd myDirectory/
实现这种行为的最佳别名或函数是什么?
编辑:对不起,我没有在第一个地方提到它:我使用zsh
假设您有目录/dir1and /dir2/linked,其中后者是前者的符号链接。
当您cd使用linked和 时pwd,您会得到输出/dir2/linked。如果你那样cd ..,你会被穿上/dir2。这种行为与你/dir2/linked之前的概念是一致的。但是,据我所知,..任何目录的父目录 ( ) 都存储在目录 inode 中(即:物理上在磁盘中)。显然,既然/dir2/linked是真的/dir1,那么inode上的父目录必须是/
为了进一步使问题复杂化,而里面/dir2/linked的输出ls ..和cd .. ; ls .是不同的!似乎cd尊重符号链接的路径,同时ls尊重“物理”路径。正如在这个问题中提到的cd -P,这个用例是有的。
man pwd 提到了“物理”和“逻辑”工作目录,但此时我仍然有几个问题:
PWD环境变量提供,如man pwd?cd并ls有不同的行为,如果它们都是 shell 命令(即:不是程序)?PWD物理路径而不是物理路径?我意识到这取决于实施,但有什么经验法则吗?function我的.bashrc文件中有一个。我知道它是做什么的,它增加了 X 个目录cd
这里是:
up()
{
local d=""
limit=$1
for ((i=1 ; i <= limit ; i++))
do
d=$d/..
done
d=$(echo $d | sed 's/^\///')
if [ -z "$d" ]; then
d=..
fi
cd $d
}
Run Code Online (Sandbox Code Playgroud)
但是你能帮我解释一下这三件事吗?
d=$d/..sed 's/^\///'d=..为什么不这样做:
up()
{
limit=$1
for ((i=1 ; i <= limit ; i++))
do
cd ..
done
}
Run Code Online (Sandbox Code Playgroud)
用法:
<<<>>>~$ up 3
<<<>>>/$
Run Code Online (Sandbox Code Playgroud) 我想写一些代码来让我切换到一些我经常去的目录。说这个程序是mycd,/a/very/long/path/name是我要去的目录。
所以我可以简单地输入mycd 2而不是cd /a/very/long/path/name. 这里我假设mycd知道2是指那个/a/very/long/path/name。也可能有mycd 1, mycd 3, ... 等。
问题是我必须编写mycd一个 shell 脚本并输入. mycd 2来做所需的事情,否则脚本只会在子脚本中执行,这不会改变我真正关心的父 shell 的任何内容。
我的问题是:
我可以不使用它source吗?因为. mycd假设mycd必须是一个 shell 脚本,这也可能会引入一些我不想要的功能。
我可以用其他一些编程语言实现它吗?
我想制作一个简单的C程序来更改我的项目目录。其内容如下:
#include <unistd.h>
int main()
{
chdir("/home/enedil/projects/algo");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我用以下命令编译它(pro.c是它的文件名):
gcc pro.c -o /usr/local/bin/pro
Run Code Online (Sandbox Code Playgroud)
没有错误或警告。但是,当我运行它,它并不会改变目录。为什么?
我正在尝试将我的目录更改为 /boot/efi,但运行sudo cd /boot/efi没有任何作用。我在 Fedora 23 上。是否有更强大的命令?