我是 bash 的新手,因为我一直在 Windows 机器上开发(是的,我知道)。直到最近我才能够通过使用 cd 进入一个目录
cd a\ dir\ name\ with\ spaces/
Run Code Online (Sandbox Code Playgroud)
但突然这不再起作用了。即使使用 TAB 自动完成,它也会生成正确的转义符,但我总是遇到类似的问题
-bash: cd: a: No such file or directory
Run Code Online (Sandbox Code Playgroud)
一位朋友提到它可能与路径有关。任何人都可以为我解释这个问题吗?
下面是我的 .bash_profile
# Exe subshell script
source ~/.bashrc
Run Code Online (Sandbox Code Playgroud)
而 .bashrc
function cs ()
{
cd $1
ls
}
# A new version of "cd" which
# prints the directory after cd'ing
cd() {
builtin cd $1
pwd
}
Run Code Online (Sandbox Code Playgroud)
正确的替换是:
cd() {
builtin cd "$1"
pwd
}
Run Code Online (Sandbox Code Playgroud)
如果要保留空格,则需要在扩展时引用包含空格的变量。
让我们检查一下:
cd
使用参数调用自定义函数with\ spaces
。with
和spaces
。with spaces
作为一个参数。builtin cd
using $1
。$1
自动扩展为with spaces
(因为这是函数接收到的)。builtin cd with spaces/
cd
使用两个参数with
and调用 to spaces
。所以要修复它:
$1
与双引号。builtin cd "with spaces"
.cd
使用一个参数正确调用。另一种可能性是只使用更通用的"$@"
而不是"$1"
将所有参数传递给另一个脚本,而不仅仅是第一个。在 99% 的情况下,这都是您想要做的。
cd() {
builtin cd "$@"
pwd
}
Run Code Online (Sandbox Code Playgroud)
显然,同样的修复适用于您的cs()
功能。
归档时间: |
|
查看次数: |
131 次 |
最近记录: |