溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

bash腳本總結(jié)1:[[:not found 錯(cuò)誤

發(fā)布時(shí)間:2020-07-10 08:43:49 來源:網(wǎng)絡(luò) 閱讀:1023 作者:mapleZDW 欄目:開發(fā)技術(shù)

運(yùn)行shell腳本經(jīng)常碰到這個(gè)坑,但是又不知道是怎么回事,總是懷疑bash版本是不是支持[[ 用法。

1.檢查bash版本。

bash --vserion

GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)

想來基本不是版本問題。

2.[[ 使用錯(cuò)誤。

在交互模式下使用:

xiaobai@XXX:~$ [[ 1 ]] && echo 'successful!'
successful!

顯然這樣用是可以的。

3.那到底是哪里出了問題呢?

使用方式來講,一般使用 sh XX.sh 或者 ./XX.sh ,嘗試一下./ 執(zhí)行,果然成功。那問題的結(jié)癥找到,

但是交互和腳本之間的差距在于#!/bin/bash——指定環(huán)境變量。那具體是什么原因呢?

xiaobai@XXX:~$ ls -hl /bin | grep sh     
-rwxr-xr-x 1 root root 998K Oct  8  2014 bash
-rwxr-xr-x 1 root root 119K Feb 19  2014 dash
lrwxrwxrwx 1 root root    4 Dec 30 00:59 rbash -> bash
lrwxrwxrwx 1 root root    4 Dec 30 00:59 sh -> dash
lrwxrwxrwx 1 root root    4 Dec 30 00:59 sh.distrib -> dash
lrwxrwxrwx 1 root root    7 Nov 15  2013 static-sh -> busybox

原來是ubuntu 的sh指向的dash、并不是環(huán)境變量指定的bash,所以說./ 是可以的。sh 方式執(zhí)行不行,那么顯而易見的是 bash XX.SH 也可以但是我們并不會(huì)經(jīng)常用的。

4. 接下去的問題就是dash 和 bash 有什么區(qū)別?

網(wǎng)上查了一下,ubuntu在6.10版本以后把系統(tǒng)默認(rèn)的shell 改成了dash ,來自官方:dash(the Debian Almquist shell)是一個(gè)比bash小很多但仍兼容POSIX標(biāo)準(zhǔn)的shell,它占用的磁盤空間更少,執(zhí)行shell腳本比bash更快,依賴的庫文件更少,當(dāng)然,在功能上無法與bash相比。dash來自于NetBSD版本的Almquist Shell(ash)。Ubuntu中將默認(rèn)shell改為dash的主要原因是效率。由于Ubuntu啟動(dòng)過程中需要啟動(dòng)大量的shell腳本,為了優(yōu)化啟動(dòng)速度和資源使用情況,Ubuntu做了這樣的改動(dòng)。

5.將dash修改為bash的方法。

sudo dpkg-reconfigure dash

選擇no ,check。

需要注意的是,這樣修改將會(huì)影響到系統(tǒng)的啟動(dòng)速度,甚至?xí)绊懙揭恍?依賴于dash獨(dú)有特性的腳本(這些特性bash沒有提供)。具體影響在哪里還在研究中。


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI