문제

스크립트에서 현재 디렉토리를 변경할 수 있습니까?

Bash에서 디렉토리 탐색을위한 유틸리티를 만들고 싶습니다. 다음과 같은 것처럼 보이는 테스트 스크립트를 만들었습니다.

#!/bin/bash
cd /home/artemb

Bash Shell에서 스크립트를 실행하면 현재 디렉토리가 변경되지 않습니다. 스크립트에서 현재 쉘 디렉토리를 변경할 수 있습니까?

도움이 되었습니까?

해결책

스크립트를 쉘 함수로 변환해야합니다.

#!/bin/bash
#
# this script should not be run directly,
# instead you need to source it from your .bashrc,
# by adding this line:
#   . ~/bin/myprog.sh
#

function myprog() {
  A=$1
  B=$2
  echo "aaa ${A} bbb ${B} ccc"
  cd /proc
}

그 이유는 각 프로세스에 자체 현재 디렉토리가 있고 쉘에서 프로그램을 실행할 때 새 프로세스로 실행되기 때문입니다. 표준 "CD", "PushD"및 "POPD"는 쉘 통역사에 내장되어 쉘 프로세스에 영향을 미칩니다.

프로그램을 쉘 기능으로 만들면 자신의 프로세스 중 대체 명령을 추가 한 다음 디렉토리 변경이 쉘 프로세스에 반영됩니다.

다른 팁

스크립트를 시작하면 환경에만 상속되는 새로운 프로세스가 만들어집니다. 그것이 끝나면 끝납니다. 현재 환경은 그대로 유지됩니다.

대신 다음과 같이 스크립트를 시작할 수 있습니다.

. myscript.sh

그만큼 . 현재 환경에서 스크립트를 평가하므로 변경 될 수 있습니다.

답을 읽을 수없고 과도하게 복잡하게 생각하면서, 나는 이것이 요청자가해야 할 일이라고 생각합니다.

  1. 해당 스크립트를 추가하십시오 PATH
  2. 스크립트를 다음과 같이 실행하십시오 . scriptname

그만큼 . (DOT)는 스크립트가 자식 쉘에서 실행되지 않도록합니다.

위를 합치면 별명을 만들 수 있습니다.

alias your_cmd=". your_cmd"

선두를 쓰고 싶지 않다면 "." 스크립트를 쉘 환경에 공급하고 싶을 때마다 또는 단순히 기억하고 싶지 않은 경우 스크립트가 올바르게 작동하려면 수행해야합니다.

Bash를 사용하는 경우 별명을 시도 할 수 있습니다.

.bashrc 파일 에이 줄을 추가하십시오.

alias p='cd /home/serdar/my_new_folder/path/'

명령 줄에 "p"를 쓰면 디렉토리가 변경됩니다.

Bash 스크립트를 실행하면 현재 환경이나 자녀의 자녀에서 작동하지 않습니다.

목표가 명령을 실행하는 것이 목표 : goto.sh /home /test /home /test에서 대화식으로 작업하는 한 가지 방법은 스크립트 내에서 Bash 대화식 서브 쉘을 실행하는 것입니다.

#!/bin/bash
cd $1
exec bash

이렇게하면이 쉘의 종료 (종료 또는 Ctrl+C)가 될 때까지 /홈 /테스트에 있습니다.

와 함께 푸시 현재 디렉토리는 디렉토리 스택에 푸시되며 주어진 디렉토리로 변경됩니다. POPD 스택 위에 디렉토리를 가져 와서 변경 한 다음 변경하십시오.

pushd ../new/dir > /dev/null
# do something in ../new/dir
popd > /dev/null

간단히 가십시오

yourusername/.bashrc (or yourusername/.bash_profile on MAC) by an editor

마지막 줄 옆 에이 코드를 추가하십시오.

alias yourcommand="cd /the_path_you_wish"

그런 다음 편집기를 종료하십시오.

그런 다음 다음 입력 :

source ~/.bashrc or source ~/.bash_profile on MAC.

이제 사용할 수 있습니다. 당신의 명령 터미널에서

디렉토리를 변경하기 위해 스크립트를 만들었습니다. 구경하다: https://github.com/ygpark/dj

기본적으로 우리는 사용합니다 cd.. 모든 디렉토리에서 돌아 오기 위해. 한 번에 돌아와야 할 디렉토리 수를 제공함으로써 더 쉽게 만들 수 있다고 생각했습니다. alias 명령을 사용하여 별도의 스크립트 파일을 사용하여이를 구현할 수 있습니다. 예를 들어:

code.sh

#!/bin/sh
 _backfunc(){
 if [ "$1" -eq 1 ]; then
  cd ..
 elif [ "$1" -eq 2 ]; then
  cd ../..
 elif [ "$1" -eq 3 ]; then
  cd ../../..
 elif [ "$1" -eq 4 ]; then
  cd ../../../..
 elif ["$1" -eq 10]; then
  cd /home/arun/Documents/work
 fi
 }
alias back='_backfunc'   

사용 후 source code.sh 현재 쉘에서 사용할 수 있습니다.

$back 2 

현재 디렉토리에서 두 단계 뒤로 나옵니다. 자세히 설명했습니다 여기. 또한 코드를 ~/.bashrc에 넣는 방법에 대해서도 설명되어있어 모든 새 쉘이 자동 으로이 새로운 별칭 명령을 갖도록합니다. 더 많은 것을 추가하여 코드를 수정하여 특정 디렉토리로 이동하기 위해 새 명령을 추가 할 수 있습니다. if conditions 그리고 다른 주장. 코드를 git에서 가져올 수도 있습니다 여기.

이 접근법은 나에게 더 쉽습니다.

명령 창이 열리면 기본 디렉토리 아래에서 관리자 인 개인 IMAC에서/users/jdoe가 다음과 같은 디렉토리가 될 것입니다 : /users/jdoe/desktop/mongo/db.3.2.1 /큰 상자.

이것들은 작업을 수행 할 수있는 단계입니다.

  1. 내가 입력 한 Vi Mongobin :cd /Users/jdoe/Desktop/Mongo/db.3.2.1/bin 첫 번째 줄로.
  2. chmod 755 mongobin
  3. source mongobin
  4. pwd

짜잔!

나는 또한 유틸리티를 만들었습니다 염소 더 쉬운 탐색에 사용할 수 있습니다.

소스 코드를 켜면 볼 수 있습니다 github.

현재 v2.3.1 그만큼 사용 개요 이렇게 보인다 :

# Create a link (h4xdir) to a directory:
goat h4xdir ~/Documents/dev

# Follow a link to change a directory:
cd h4xdir

# Follow a link (and don't stop there!):
cd h4xdir/awesome-project

# Go up the filesystem tree with '...' (same as `cd ../../`):
cd ...

# List all your links:
goat list

# Delete a link (or more):
goat delete h4xdir lojban

# Delete all the links which point to directories with the given prefix:
goat deleteprefix $HOME/Documents

# Delete all saved links:
goat nuke

# Delete broken links:
goat fix

나는 새로운 쉘을 발사하지 않고 다른 프로젝트에서도 같은 일을하고 싶습니다.

귀하의 경우 :

cd /home/artemb

_script를 다음과 같이 저장합니다.

echo cd /home/artemb

그런 다음 다음과 같이 발사하십시오.

\`./the_script\`

그런 다음 동일한 쉘을 사용하여 디렉토리로 이동합니다.

Shellscript에 아래 CD 라인을 추가하십시오.

exec $SHELL

경로를 선언하십시오 :

PATH='/home/artemb'     
cd ${PATH}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top