當我更改腳本中的工作目錄並執行它時,工作目錄僅更改為腳本中的指定路徑

當我更改腳本中的工作目錄並執行它時,工作目錄僅更改為腳本中的指定路徑

當我更改腳本中的工作目錄並執行它時,工作目錄僅更改為腳本中的指定路徑。這是我的腳本:( 這是為了確保它是否確實更改了目錄)
#!/bin/bash
cd /media/hard/drive/partitionX/
pwd

當我執行它時,它會返回指定的路徑,但我在終端中的工作目錄沒有改變。如何透過腳本更改終端機中的工作目錄?

答案1

這個是正常的。 “當前”或“工作”目錄是每個進程的參數,進程只能更改它自己的工作目錄。獨立腳本是作為單獨的 shell 進程執行,不會影響父 shell(事實上,父 shell 可能不會總是如地獄)。

您將需要使用 shell 內部的功能,例如:

  • 外殼功能:

    mycd() {
        cd /media/hard/drive/partitionX/;
        pwd;
    }
    
  • 外殼別名:

    alias mycd='cd /media/hard/drive/partitionX; pwd'
    
  • “獲取”腳本而不是執行它:

    . mycd.sh
    

如果您的主要目標是建立某些目錄的快捷方式,您也可以使用:

  • 符號連結位於更方便的位置:

    ln -s /media/hard/drive/partitionX ~/partX
    cd ~/partX
    
  • 變數($mydir):

    mydir=/media/hard/drive
    cd $mydir
    
  • $CDPATH 功能:

    CDPATH=".:/media/hard/drive"
    cd partitionX
    

答案2

實際上,經過多次搜索,我剛剛發現,如果您需要更改目錄,並且仍然保留相同的 shell,以便您可以在當前腳本中獲得所有答案,您可以使用:

(cd your_dir; do_some_command_there)

例如,我需要使用的是:

((cd your_dir; git remote -v | wc -l)

奇蹟般有效!

相關內容