• 2

Linux 執行 bash 檔案, 一直說 command not found.

在 Linux Mint terminal 使用 nano 建立了 wanip 檔案, 內容是

#!/bin/bash
curl https://api.ipify.org -o wanip.txt


系統一直回覆 command not found

但我已對 wanip 檔案執行了 chmod u+x wanip
在 terminal 執行 curl https://api.ipify.org -o wanip.txt 也沒問題, 抓到了 路由器的 wan ip address 並寫入了 wanip.txt

怎麼回事?
2021-05-02 7:19 發佈
樓主對於 Unix Shell Script 的掌握度要多學一些
Unix Shell Script 和 Windows batch file 不一樣,一個是多人多工,一個是單人作業
Unix 執行 Shell script時,會fork一個新的子程序,子程序原則上不會繼承母程序的環境變數(簡單來說就是會再開一個新畫面;這個畫面與原來無關)
所以直接執行命令時,環境變數(如path)會被預先代入,正常!
但是Script執行時,環境變數(如path)就需要自己定義,尤其是丟入排程執行時

Un*x Shell Script 規定
1.第一行指定shell如
#! /bin/bash
( #號+驚嘆號+空白+完整路徑Shell) 那個空白很重要,一定要加
2.Script 權限要有x權限,如chmod u+rx get_wanip.sh
如不使用chmod, 使用 /bin/bash get_wanip.sh 也行
3.確認所有相關程序/檔案路徑,可以使用where指令收尋Path如
where bash
where curl
4. 可以使用"點"開頭來執行指令,強制Script不fork子程序,繼承環境變數並回寫環境變數如
. get_wanip.sh
記住: 丟排程時此法會產生很多困擾,不要使用
我是 Linux 新手

在 #! 後面加了空白還是錯誤

iadmin@LinuxMint:~/Desktop/bash$ ls
wanip
iadmin@LinuxMint:~/Desktop/bash$ cat wanip
#! /bin/bash
curl -s https://api.ipify.org -o wanip.txt

iadmin@LinuxMint:~/Desktop/bash$ curl -s https://api.ipify.org -o wanip.txt
iadmin@LinuxMint:~/Desktop/bash$ ls
wanip wanip.txt
iadmin@LinuxMint:~/Desktop/bash$ wanip
bash: wanip: command not found
iadmin@LinuxMint:~/Desktop/bash$ which bash
/bin/bash
iadmin@LinuxMint:~/Desktop/bash$ which curl
/usr/bin/curl
iadmin@LinuxMint:~/Desktop/bash$ ls -l wanip
-rwxrw-r-- 1 iadmin iadmin 56 May 2 08:39 wanip
maya95 wrote:
我是 Linux 新(恕刪)


路徑問題??

同目錄下 ./wanip
你的資料夾沒加入bash路徑
先執行 source wanip
應該就可以先初步執行你的script

如果能執行那代表你檔案沒問題
接著可以用 echo $PATH 這個指令來確認一下你的bash路徑
正常只會有/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games
如果在上面沒有發現你的bash資料夾
代表你沒有將你自己建立的bash資料夾路徑加入bash才會每次都必須完整打出路徑以及加上.才能執行

接著你輸入下面這個指令
nano ~/.bash_profile

看看有沒有下面這些指令 如果沒有 就加上去然後Ctrl+S存檔 在Ctrl+X離開nano
export PATH=$PATH:$HOME/Desktop/bash/
if [ -f ~/.bashrc ];
then
. ~/.bashrc
fi

存檔重開機後
以後就能直接打指令不需要加上 source前綴了
vietnam_chiu wrote:
路徑問題??同目錄下...(恕刪)

樓上怎麼有人亂教?這個才是正解。
知道 Linux 很龜毛, 卻不知道如此龜毛. 以下三個都可以

./wanip , source wanip , . wanip,

就是不能直接在所在目錄直接執行 wanip

是要研究一下 path, .bash_profile, .bashrc 東東了

謝謝.
maya95 wrote:
知道 Linux 很(恕刪)


Windows的PATH沒指到也是一樣喔
slash410 wrote:
Windows的PATH沒指到也是一樣喔


不一樣. 在可執行檔所在目錄直接打檔名就可, 連 .exe .com .bat 都不需要
系統沒有告訴你是什麼command not found嗎?
這情況不是你的curl有問題不然就是bash有問題
  • 2
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?