回覆列表
  • 1 # 產品經理老胡

    老胡的看法:

    我猜題主在使用Linux系統時,應該是經常用到cd <某個目錄>這樣一個操作,然後就想著把它寫成一個指令碼,透過執行指令碼來實現快捷切換工作目錄的目的吧。其實題主這樣想是沒錯的,這樣做的時候,cd命令也確實起了作用,但實際上也的確並不會在終端切換工作目錄。其中原因,且聽老胡細細道來:

    一、確實被執行了的cd命令

    從上面的圖片可以看到工作目錄並沒有變化,但是為啥老胡說cd命令確實被執行了呢?這是因為執行cd命令的指令碼是在當前的shell的一個子shell裡面執行的,在子shell裡cd命令確實將當前的工作目錄改成了/home/pm/demo,只不過發生改變的是在子shell的程式空間裡的當前工作目錄,而不是主程序shell的。當這個demo.sh執行完畢之後,子程序銷燬,主程序的shell工作目錄並沒有受到影響。

    為了證明這個過程,我在腳本里加了一句pwd用於列印“當前的工作目錄”,結果如下:

    二、如何實現簡短的更改工作目錄?

    老胡這裡有三個辦法:

    1、使用別名alias

    alias的作用是定義一個命令的別名,通常我們都是用它來給一些冗長複雜的命令定義一個簡短的別名。所以在這裡我們就能夠用它來實現意圖了:

    alias demodir="cd /home/pm/demo"

    定義之後,直接執行demodir,就可以改變工作目錄了:

    2、使用“.”來執行指令碼

    使用“.”執行指令碼的作用是在當前的程序中執行指令碼中的語句,而不是建立一個新的程序,用子shell去執行:

    3、定義一個函式過程

    在當前的shell中直接定義一個函式過程,函式體的內容就是cd語句:

    總結一下,使用指令碼來執行cd命令只能改變指令碼執行時子shell中的工作目錄,無法更改當前shell的工作目錄,如果想要使用指令碼更改當前的工作目錄,需要用“.”來執行指令碼。或者直接用別名alias代替指令碼實現更改工作目錄的目標。

  • 中秋節和大豐收的關聯?
  • 哪些道理是女生有了男朋友之後才懂的?