我经常发现自己想要移动一个文件,然后在它所在的位置创建一个符号链接。
在手动执行此操作时,我倾向于扭曲我的想法。(尤其是在做了六个文件之后)
用例:
如果没有一个命令,
我会很感激鱼脚本。
(fish 不是 POSIX shell,不支持 sh 语言)
定义的最棘手的事情之一是..
(? 在链接的帖子中); 特别是它如何与符号链接交互。
我想检查一下我是否正确理解了 POSIX 规则。
当进程解析现有目录条目的路径名时,整个路径名应如下所述解析。当进程解析要在解析路径名后立即创建的目录条目的路径名时,路径名解析在最后一个组件的路径前缀的所有组件都已解析后终止。然后由流程负责创建最终组件。... pathname 中的每个文件名都位于其前任指定的目录中(例如,在路径名片段 a/b 中,文件 b 位于目录 a 中)。...如果在路径名解析过程中遇到符号链接,...系统应使用符号链接的内容作为剩余路径名的前缀,如果有的话...解析的路径名应是刚刚创建的路径名的解析。如果生成的路径名不以 a 开头,则该路径名的第一个文件名的前身被视为包含符号链接的目录。特殊文件名点应指代其前任指定的目录。特殊文件名 dot-dot 应指代其前任目录的父目录。作为一种特殊情况,在根目录中,dot-dot 可能指的是根目录本身。.. dot-dot 可能指的是根目录本身。.. dot-dot 可能指的是根目录本身。..
所以我的理解是POSIX 说的是在解析..
到父目录之前应该扩展符号链接。
这样对吗?
因此,对于规范化路径,POSIX 兼容方式的行为
realpath -P
是要求存在所有目录(但不是最终文件组件),并从左到右展开解析符号链接(一旦遇到),然后应用..
which也就是说,在处理路径的所有步骤中都必须读取文件系统。
我们可以将其与node.jsPath.normalize
(甚至它的Path.posix.normalize
)的行为进行对比——我认为这在许多编程语言中是相当正常的(Python2和3 os.path
类似)。相当于realpath -s -m
,也就是说它完全忽略了某些目录可能是simlinks,或者可能不存在。
这很好,因为它根本不必接触文件系统。
如果我们采用已经以这种方式规范化的路径,并将其提供给一个确实触及文件系统的函数(例如fs.readFile
)那么它相当于我们是否使用了规范化了路径realpath -L
,即“..
在符号链接之前解析”
Bashcd
也表现得好像它已经处理了它的参数,realpath -L
除非你给它这个-P …
我经常需要遵循复杂的安装过程,例如必须为 buildtools 构建依赖项,为我希望从源代码安装的应用程序构建依赖项。
一旦我完成了一次,我真的不想尝试并记住我所做的所有步骤。
zsh(和其他 shell)中的命令历史记录已经记录了我所做的事情。是否可以将最近执行的 100 个(例如)命令导出到.sh
脚本中?
然后我可以编辑这个脚本,删除在我开始安装之前的命令,删除我犯错的命令,并留下一个安装脚本,我可以在类似的环境中提供给其他人。(或在另一台机器上使用我自己。)。
我怀疑,我的命令历史记录已经存储在我的主目录中的一个点文件中。
我遇到了一个问题,试图在 fish 函数中根据程序的输出动态设置一些变量。
我将问题缩小到 MWE:
function example
eval (echo 'set -x FOO 1;')
end
Run Code Online (Sandbox Code Playgroud)
调用:
>example
>echo $FOO
Run Code Online (Sandbox Code Playgroud)
导致没有输出——即尚未设置 FOO 环境变量。我应该怎么做?
用户已启动 Java 程序并且当前正在运行。
作为 root,我可以通过ps -A
.
我怎样才能把这个过程带到前台?