小编Lyn*_*ite的帖子

是否有移动文件的命令,并将其符号链接回原来的位置?

我经常发现自己想要移动一个文件,然后在它所在的位置创建一个符号链接。

在手动执行此操作时,我倾向于扭曲我的想法。(尤其是在做了六个文件之后)

用例:

  • 将我所有的“点文件”移动到一个文件夹中,以便我可以对它们进行版本控制
  • 将文件移动到更快的磁盘(暂存)以实现高性能计算

如果没有一个命令,
我会很感激鱼脚本。
(fish 不是 POSIX shell,不支持 sh 语言)

symlink fish

5
推荐指数
1
解决办法
670
查看次数

我对符号链接和`..` 在 POSIX 下如何交互的理解是否正确

我正在研究路径数学描述(例如文件路径,但也更抽象和通用)

定义的最棘手的事情之一是..(? 在链接的帖子中); 特别是它如何与符号链接交互。

我想检查一下我是否正确理解了 POSIX 规则。

POSIX 4.14

当进程解析现有目录条目的路径名时,整个路径名应如下所述解析。当进程解析要在解析路径名后立即创建的目录条目的路径名时,路径名解析在最后一个组件的路径前缀的所有组件都已解析后终止。然后由流程负责创建最终组件。... 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)的行为进行对比——我认为这在许多编程语言中是相当正常的(Python23 os.path类似)。相当于realpath -s -m也就是说它完全忽略了某些目录可能是simlinks,或者可能不存在。 这很好,因为它根本不必接触文件系统。

如果我们采用已经以这种方式规范化的路径,并将其提供给一个确实触及文件系统的函数(例如fs.readFile)那么它相当于我们是否使用了规范化了路径realpath -L,即..在符号链接之前解析”

Bashcd也表现得好像它已经处理了它的参数,realpath -L除非你给它这个-P …

symlink filenames posix

5
推荐指数
1
解决办法
274
查看次数

将命令历史导出到 Shell 脚本

我经常需要遵循复杂的安装过程,例如必须为 buildtools 构建依赖项,为我希望从源代码安装的应用程序构建依赖项。

一旦我完成了一次,我真的不想尝试并记住我所做的所有步骤。

zsh(和其他 shell)中的命令历史记录已经记录了我所做的事情。是否可以将最近执行的 100 个(例如)命令导出到.sh脚本中?

然后我可以编辑这个脚本,删除在我开始安装之前的命令,删除我犯错的命令,并留下一个安装脚本,我可以在类似的环境中提供给其他人。(或在另一台机器上使用我自己。)。

我怀疑,我的命令历史记录已经存储在我的主目录中的一个点文件中。

shell command-history zsh

3
推荐指数
1
解决办法
1910
查看次数

为什么 set -x 不能在 fish 的函数内的 eval 内工作?

我遇到了一个问题,试图在 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 环境变量。我应该怎么做?

fish

3
推荐指数
2
解决办法
711
查看次数

如何切换到其他用户的进程?

用户已启动 Java 程序并且当前正在运行。

作为 root,我可以通过ps -A.

我怎样才能把这个过程带到前台?

process

3
推荐指数
1
解决办法
2484
查看次数

标签 统计

fish ×2

symlink ×2

command-history ×1

filenames ×1

posix ×1

process ×1

shell ×1

zsh ×1