.bashrc 경로 문제

.bashrc 경로 문제

Idl예를 들어 많은 하위 디렉터리를 포함하는 디렉터리를 추가하여 이 작업을 수행하면 IDL_PATH다른 모든 하위 디렉터리에 있는 모든 실행 파일을 실행할 수 있는 방법을 알려주실 수 있습니까 ?.bashrcsource .bashrc

가능합니까? 내가 뭐하는 거지

IDL_PATH=.:+/idl/idl70/lib:/home/cs/Idl .... 

Idl폴더에는 많은 하위 디렉터리(예: xidlidl_code) 가 있습니다 net. 그러나 하위 디렉터리가 아닌 폴더에서만 파일을 실행할 수 있습니다 Idl.

내가 실행하고 싶은 파일은 .pro확장자가 있는 IDL 프로시저입니다. 모든 .pro파일을 하나의 디렉토리(예: )에 넣으면 /home/cs/Idl전체 pro 파일이 실행됩니다.

해결 방법이 무엇입니까?

답변1

실행 파일이 포함된 각 디렉터리를 개별적으로 추가하거나 모든 실행 파일을 동일한 디렉터리에 연결해야 하는 것 같습니다.

  1. 모든 디렉터리를 수동으로 추가합니다.

    먼저 관련 디렉터리 목록을 수집합니다(Linux를 실행 중이거나 GNU 도구가 있다고 가정합니다).

    find /home/cs/Id -type f -executable -exec dirname {} + | sort -u
    

    위의 명령은 모든 실행 파일을 찾고 /home/cs/Id해당 파일이 포함된 디렉터리의 이름을 인쇄합니다. sort -u각 디렉토리를 한 번만 인쇄 하십시오 . 몇 가지 테스트 디렉터리를 만들었으므로 내 시스템에서 다음을 얻습니다.

    $ find /home/terdon/Idl/ -type f -executable -exec dirname {} + | sort -u
    /home/terdon/Idl/foo/bar/bag/ho
    /home/terdon/Idl/foo/bar/bag/ho/fa/fe/re
    /home/terdon/Idl/foo/bar/baz/foo/bar
    /home/terdon/Idl/foo/bar/baz/foo/bar/baz/foo/bar/baz
    

    이제 다음 형식에 추가할 올바른 형식으로 변환하려고 합니다 $PATH.

    $ find /home/terdon/Idl/ -type f -executable -exec dirname {} + | sort -u | tr '\n' ':'
    /home/terdon/Idl/foo/bar/bag/ho:/home/terdon/Idl/foo/bar/bag/ho/fa/fe/re:/home/terdon/Idl/foo/bar/baz/foo/bar:/home/terdon/Idl/foo/bar/baz/foo/bar/baz/foo/bar/baz:
    

    해당 콘텐츠(마지막 콘텐츠 제외 :)를 복사하여 다음 항목에 추가하세요 PATH.

    PATH="$PATH:/home/terdon/Idl/foo/bar/bag/ho:/home/terdon/Idl/foo/bar/bag/ho/fa/fe/re:/home/terdon/Idl/foo/bar/baz/foo/bar:/home/terdon/Idl/foo/bar/baz/foo/bar/baz/foo/bar/baz"
    
  2. 모든 실행 파일을 찾아 이미 PATH에 있는 디렉터리에 심볼릭 링크합니다..

    find /home/terdon/Idl/ -type f -executable -exec ln -s {} ~/bin \;
    

    일부 Linux 시스템(예: Ubuntu)에서는 이 ~/bin디렉터리가 있는 경우 디렉터리에 자동으로 추가됩니다. PATH시스템에서 이런 일이 발생하지 않으면 직접 추가하세요.

    PATH="$PATH:/home/cs/bin"
    

답변2

나는 디렉토리가 열거되어야 한다고 생각한다. 그러면 다음 줄이 자동으로 생성됩니다.

#!/usr/bin/python3
# -*- coding: utf-8 -*-

# Copyright © 2016 Martin Ueding <[email protected]>
# Licensed under the MIT license

import argparse
import os


def main():
    options = _parse_args()

    additions = []

    for base in options.base:
        for dirpath, dirnames, filenames in os.walk(base):
            additions.append(dirpath)

    line = ':'.join(additions)

    if options.short:
        print(line)
    else:
        print('PATH=$PATH:'+line)


def _parse_args():
    parser = argparse.ArgumentParser(description='')
    parser.add_argument('base', nargs='+', help='Basepath')
    parser.add_argument('--short', action='store_true')
    options = parser.parse_args()

    return options


if __name__ == '__main__':
    main()

해당 스니펫을 다른 이름으로 저장 /usr/bin/path-recurse하고 적용하십시오 chmod +x /usr/bin/path-recurse. 그런 다음 프롬프트에서 이를 사용하여 라인을 생성하면 path-recurse /tmp /foobar …Bash 라인이 제공됩니다.

PATH=$PATH:/tmp:/tmp/kde-muIusrrC:/tmp/vs0cOIg:/tmp/.esd-1000:/tmp/ssh-oGWOvuUnyqPF:/tmp/.Test-unix:/tmp/.font-unix:/tmp/.XIM-unix:/tmp/.ICE-unix:/tmp/.X11-unix 

또는 다음에서 다음을 사용할 수 있습니다 .bashrc.

PATH=$PATH:$(path-recurve /tmp /foobar …)

.bashrc그런 다음 소싱될 때마다 모든 폴더를 동적으로 반복합니다.

답변3

나는 내 문제를 해결했다고 생각합니다. 내가 작성한 .bashrc 파일에서 내가 한 모든 일은 다음과 같습니다.

PATH=${PATH}:$(find ~/Idl -type d | tr '\n' ':' | sed 's/:$//')

그런 다음: > source.bashrc

이제 기본 Idl 디렉터리 아래의 다양한 하위 디렉터리에서 모든 프로그램과 스크립트를 실행할 수 있습니다.

관심을 가져주셔서 감사합니다.

관련 정보