递归显示相对于当前目录的所有父目录。
#!/bin/bash
IFS=/
for var in $(pwd)
do
echo "$var"
done
我创建的 bash 脚本中有以下代码。当我从路径中没有空格的目录运行它时,它会按预期工作,但是如果我从带有空格的目录运行它会失败。我很确定我需要以某种方式逃避它,但我尝试过的任何方法似乎都不起作用。
for file in `pwd`/*
do
echo file:$file
done
“失败”是指如果我从路径“~/dir 1/test”运行命令,它将回显以下内容:
file: ~/dir
file: 1/
file: test
我希望它列出目录中的文件(如果当前目录中没有空格,它会这样做):
file: file 1
file: file 2
file: file 3
请注意,如果当前目录中包含空格,则这只是一个问题,其中包含空格的文件处理得很好。
我在这里阅读了几个类似的示例,例如为什么我的 shell 脚本会因空格或其他特殊字符而窒息?并遍历名称中带有空格的文件?但我看不出它们如何(如果它们相关)适用于我的具体示例。
我pwd
在终端上写,它正在显示home/<my_username>
。但是我在物理上找不到具有此路径的任何目录。为了消除我的困惑,我输入ls
了 ,但它显示了我可以从文件管理器中看到的主目录中的文件夹。但是我不能<my_username>
在 Home 里面创建一个文件夹。我在这里想念什么?
proteeti@proteeti-X556UQK:~$ pwd
/home/proteeti
proteeti@proteeti-X556UQK:~$ ls
Courses Dev Downloads Music Public usr
Desktop Documents examples.desktop Pictures Templates Videos
没有名为“Proteeti”的文件夹
当我在 tcl 环境下工作时,一旦我 cd 到一个目录,即使我指定的路径是它的符号链接,那么无论我运行pwd -L还是pwd -P,它们都返回绝对路径。这对我来说很麻烦,因为我尝试用变量名替换用户特定的工作区路径,这样当不同的用户执行脚本时,他们将切换到自己的工作区。但是,系统 $::env(WORK) 返回路径的符号链接,而 pwd 命令返回绝对路径,因此我无法执行 sed 命令。
例如,
stcl> cd $::env(WORK)
stcl> puts [format "cd %s" [exec echo [pwd] | sed "s,$::env(WORK),\$WORK,g"]]
我想要代码做的是打印“cd $WORK”,但是因为 pwd 返回绝对路径,即使我使用 pwd -L,我也无法与 sed 命令匹配,因此无法替换字符串。
假设我登录到 unix 系统上的 shell 并开始敲击命令。我最初从用户的主目录开始~
。我可能会从那里cd
下到目录Documents
。
这里更改工作目录的命令非常简单直观地理解:父节点有一个它可以访问的子节点列表,并且大概它使用搜索的(优化的)变体来定位子节点的存在用户输入的名称,然后“更改”工作目录以匹配此 - 如果我在那里错了,请纠正我。甚至更简单的是,shell 只是“天真地”尝试完全按照用户的意愿访问目录,并且当文件系统返回某种类型的错误时,shell 会相应地显示响应。
然而,我感兴趣的是,当我向上导航目录时,相同的过程是如何工作的,即到父级或父级的父级。
鉴于我未知的,可能是“盲”的位置Documents
,可能是整个文件系统树中具有该名称的多个目录之一,Unix 如何确定我接下来应该放在哪里?它是否参考pwd
并检查了它?如果是,如何pwd
跟踪当前的导航状态?