Ls 显示了一些用于死符号链接的 bash 脚本而不是文件名

Ls 显示了一些用于死符号链接的 bash 脚本而不是文件名

这是 Symfony PHP 框架的bin/目录,由于ls -la
某种原因,输出显示的是 bash 脚本而不是文件名。 Linux 版本是 Debian Stretch。

ls 显示死符号链接的一些 bash 脚本而不是文件名

php composer.phar update这是通过 Atlassian Pipelines 脚本运行命令的结果。如果手动运行相同的命令,则一切正常。 bitbucket-pipelines.yml 的相关部分看起来像

pipelines:
  custom:
    manual_preprod:
      - step:
          script:
            - ssh $PREPROD_USER@$PREPROD_HOST -t "cd ${FULLPATH} && php composer.phar update"

我想 php Composer 中存在一个错误,导致它在创建符号链接时提供文件内容而不是文件名?这怎么可能?

该代码似乎来自作曲家的脚本之一, 二进制安装程序.php

编辑:

看起来这是一个 git + Windows 到 Linux 的问题。

这些文件被添加到 Windows 上的 git repo 中,在该系统下只是常规文件,内容如下

#!/usr/bin/env sh
dir=$(d=\${0%[/\\\\]*}; cd "\$d" > /dev/null; cd $binDir && pwd)
# See if we are running in Cygwin by checking for cygpath program
if command -v 'cygpath' >/dev/null 2>&1; then
    # Cygwin paths start with /cygdrive/ which will break windows PHP,
    # so we need to translate the dir path to windows format. However
    # we could be using cygwin PHP which does not require this, so we
    # test if the path to PHP starts with /cygdrive/ rather than /usr/bin
    if [[ $(which php) == /cygdrive/* ]]; then
        dir=$(cygpath -m "\$dir");
    fi
fi

在 Debian Stretch 上发出命令后git pull,这些文件变成了上面奇怪的符号链接,内容变成了目标文件的文件名。

答案1

您听起来好像已经在您的(全局或本地存储库)中core.symlinks设置了。从:false.gitconfiggit-config(1)

核心符号链接
如果false,符号链接将作为包含链接文本的小型纯文件检出。 git-更新-索引(1) 和git 添加(1)不会将录制类型更改为普通文件。对于不支持符号链接的 FAT 等文件系统很有用。

默认值为true,除了git 克隆(1) 或git初始化(1)core.symlinks false在创建存储库时将探测并设置是否合适。

您可以通过运行以下命令来检查设置的状态:

git config core.editor

相关内容