디렉터리를 변경한 다음 해당 디렉터리에서 노드 서버를 시작하는 편리한 별칭을 만들려고 합니다. 저는 대부분 잘 작동하고 있는데, 해결할 수 없는 작은 문제가 하나 있습니다.
파일 내의 디렉터리만 변경하도록 별칭을 설정하면 ~/.bashrc
예상되는 동작이 나타납니다.
alias ta='cd /Users/scotty/Develop/Meteor/task-assist'
예상되는 동작이란 $ ta
터미널에서 이것을 실행하면 디렉터리가 변경될 뿐만 아니라 터미널에서 새 탭을 열 수도 있고 디렉터리가 새 탭에 상속된다는 것입니다.
그러나 어떤 이유로 노드 서버를 시작하기 위해 해당 별칭에 추가 명령을 추가하면 $ ta
다시 실행한 후 현재 디렉터리가 새 터미널 탭으로 전송되지 않습니다(새 탭은 루트 디렉터리에서만 열립니다). 디렉터리가 변경되고 서버가 시작되는데 변경된 디렉터리가 실제로 터미널에 설정되지 않은 것과 같습니다. 디렉토리는 서버를 종료할 때만 ctrl +c
터미널에서 업데이트됩니다 . 나는 성공하지 않고 작동하도록 별칭과 함수를 시도했습니다.
### meteor is the command that starts the server
alias ta='cd /Users/scotty/Develop/Meteor/task-assist && meteor'
### Also tried a function
ta(){
cd /Users/scotty/Develop/Meteor/task-assist
meteor
}
현재 작업 디렉터리로 새 터미널 탭을 열려면 디렉터리를 변경하고 meteor를 실행하는 두 개의 별도 명령이 필요한 것과 거의 같습니다. 다시 한번 더 명확하게 설명하자면, 터미널에서 실행한 $ta
다음 키를 눌러 cmd + t
새 탭을 열 때 새 탭의 현재 디렉터리는 다음과 같습니다 /Users/scotty/Develop/Meteor/task-assist
.
별칭을 사용하여 이를 달성하는 방법에 대한 아이디어가 있습니까?
답변1
다른 길로 가야 합니다. .bashrc
bash 인스턴스의 마지막 디렉터리 (현재 작업 디렉터리) CWD
에서 변경된 디렉터리 끝에 줄을 추가합니다 .
다음과 같은 줄이 나에게 효과적입니다.
cd $(readlink "/proc/$(echo -n $(ps -u $(whoami) -eo stat,pid,cmd | awk '$3 == "'$(which bash)'" && $1 ~ /\+/{print $2}' | sort | head -1))/cwd")
설명하다:
cd $(...)
:디렉터리를 아래에 식별된 디렉터리로 변경합니다.readlink /proc/$(...)/cwd
/proc/pid/cwd
: (현재 작업 디렉터리)를 가리키는 링크를 읽습니다.echo -n $(...)
: 후행 줄 바꿈 제거ps -u $(whoami) -eo stat,pid,cmd
: 나의 프로세스를 간단한 형식으로 제시awk '$3 == "'$(which bash)'" && $1 ~ /\+/{print $2}'
그것이 전경 프로세스 그룹( 필드 로 표시됨 )에bash
있는 경우 pid를 인쇄합니다.bash
+
stat
sort | head -1
우리는 가장 낮은 PID를 원합니다
편집하다:
귀하의 경우에는 이것이 더 나은 해결책이 될 수 있습니다.
cd $(readlink /proc/$(pgrep -n meteor)/cwd)
최신 인스턴스의 pid를 결정하고 meteor
현재 작업 디렉터리로 변경합니다.
답변2
방금 이 별칭을 만들었습니다(bash를 사용하고 있습니다).
christian@fujiu1404:~$ alias ta='cd tmp ; date'
christian@fujiu1404:~$ ta
Wed Sep 17 14:47:16 BST 2014
christian@fujiu1404:~/tmp$ alias ta='cd tmp && date'
christian@fujiu1404:~/tmp$ cd ..
christian@fujiu1404:~$ ta
Wed Sep 17 14:48:28 BST 2014
christian@fujiu1404:~/tmp$
그들은 일 했어!