您好,登錄后才能下訂單哦!
運(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沒有提供)。具體影響在哪里還在研究中。
免責(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)容。