2013-06-07 1 views
9

bash에서는 루비와 마찬가지로 프로그램 이름이 $ 0에 의해 부여됩니다. 물고기 중에 뭐야? 내가해야 할 일은 다음과 같습니다.물고기 쉘 스크립트에서 프로그램 이름을 얻는 방법은 무엇입니까?

set PROGRAM (ps --no-header -o args -p %self | egrep -o '\S+')[2] 

하지만 프로그램 이름은 이미 어딘가에 있어야합니다. 또한 각 프로그램의 스텁에서 프로그램 이름을 변수로 설정할 수도 있지만 유지 관리 문제가 있습니다.

답변

14

명령과 동일한 결과를 얻으려면 찾고있는 스크립트 파일 이름을 사용하십시오.

이 정보는 변수에 저장되지 않지만 status을 쿼리하면 표시됩니다.

basename (status -f)  # The name of the file 
status -f     # The full path of the file 

더 많은 정보 : http://fishshell.com/docs/2.0/commands.html#status

+0

프로그램 이름이 실행중인 파일과 다른 경우에는 작동하지 않습니다. 예를 들어 명령이 config.fish 또는 symlinked 파일에 정의 된 함수 인 경우를 예로들 수 있습니다. – Thayne

4

fish의 경우 프로그램 이름으로 $_을 사용하십시오.

+1

감사합니다. 나는 $ _와 아무 것도 얻지 못했다. [link] (http://fishshell.com/docs/2.0/index.html)에는 $ _에 대한 간단한 참조가 있습니다. 또한 [link] (https://github.com/fish-shell/fish-shell/issues/813). 창 제목과 관련이 있지만 실제 프로그램 이름이 아닙니다. – user1494787

+1

대화 형으로 현재 명령의 이름입니다 (예 : 'echo $ _'에 대해'echo'를 반환합니다. 함수에서 여전히 입력 한 최상위 대화 형 명령입니다 (예 :'function f; g; end; 함수 g; echo $ _; end' 그리고'f'를 입력하면'f'가 인쇄됩니다). 비대화 형 스크립트에서는 비어있는 것 같습니다. 어쨌든, 당신이 원하는 것이 아닙니다. –

+1

어디서나 이러한 특수 변수 이름 목록이 있습니까? (다른 프로그램은'$ argv'가 될 것입니다.) 그들은 구글에게 다소 어려워요. – mjs

관련 문제