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에 심볼릭 링크를 생성할 때 파일 이름 대신 파일 내용을 제공하게 하는 버그가 있는 것 같습니다. 어떻게 이럴 수있어?

코드는 작곡가의 스크립트 중 하나에서 나온 것으로 보입니다. 바이너리 installer.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심볼릭 링크는 링크 텍스트가 포함된 작은 일반 파일로 체크아웃됩니다. 자식 업데이트 인덱스(1) 그리고자식 추가(1) 녹화 형식은 일반 파일로 변경되지 않습니다. 심볼릭 링크를 지원하지 않는 FAT와 같은 파일 시스템에 유용합니다.

기본값은 입니다 true.자식 클론(1) 또는자식 초기화(1) core.symlinks false저장소 생성 시 적합성을 감지하여 설정합니다.

다음 명령을 실행하여 설정 상태를 확인할 수 있습니다.

git config core.editor

관련 정보