[問題] 關於shell script 一個奇怪的問題

看板Linux作者 (捷豹)時間12年前 (2013/07/02 14:35), 編輯推噓7(7023)
留言30則, 8人參與, 最新討論串1/1
小弟最近才開使用shell script (bash) 但發現了一個怪問題 很多指令再terminal 直營都沒問題 但是寫在script 裡面執行就會出錯 譬如 我想定義一個string array 如果在terminal 直接輸入 declare -a arr=('001' '002' '003') 就沒問題 但如果存成檔名test1.sh 的script 再執行 就會出現以下錯誤 test1.sh: 1: test1.sh: Syntax error: "(" unexpected 請問友人知道怎麼解決嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 68.80.225.158

07/02 16:00, , 1F
我試過沒問題耶
07/02 16:00, 1F

07/02 16:46, , 2F
請先檢查你使用什麼shell script, bash沒問題
07/02 16:46, 2F

07/02 16:49, , 3F
你可能是使用到sh執行
07/02 16:49, 3F

07/02 20:49, , 4F
script第一行改成#!/bin/bash應該就可以.
07/02 20:49, 4F

07/03 02:31, , 5F
我剛用其他cluster 跑就可以, 用我自己的電腦就不行
07/03 02:31, 5F

07/03 02:47, , 6F
先確認login shell與path echo $SHELL $BASH_VERSION
07/03 02:47, 6F

07/03 03:03, , 7F
我確認了 /bin/bash 4.2.45(1)-release
07/03 03:03, 7F

07/03 03:03, , 8F
不知道是不是版本的問題?
07/03 03:03, 8F

07/03 08:09, , 9F
你的/bin/sh是bash嗎?
07/03 08:09, 9F

07/03 08:09, , 10F
試試看 bash test1.sh 這樣執行,或是#!/bin/bash
07/03 08:09, 10F

07/04 00:54, , 11F
此問題主要是/bin/sh實際上為dash - 只提基本功能.
07/04 00:54, 11F

07/04 00:54, , 12F
改為#!/bin/bash即可解覺問題.
07/04 00:54, 12F

07/04 17:58, , 13F
可是airjaguar確認他的login shell是bash耶!
07/04 17:58, 13F

07/04 17:59, , 14F
login shell不見得是/bin/sh呀
07/04 17:59, 14F

07/04 18:00, , 15F
像是debian/ubuntu,預設login shell是bash,但/bin/sh是dash
07/04 18:00, 15F

07/04 18:01, , 16F
不然查一下存檔的標準輸入有無走樣 cat < test1.sh
07/04 18:01, 16F

07/04 18:04, , 17F
喔~最近開始使用bash,所以先前都是用sh囉!
07/04 18:04, 17F

07/04 18:36, , 18F
所以Linux system執行sh檔是用/bin/sh來run,而不是login
07/04 18:36, 18F

07/04 18:37, , 19F
shell?如果是那真是我觀念上的盲點阿!!
07/04 18:37, 19F

07/04 18:44, , 20F
大多數腳本開頭是寫#!/bin/sh,所以會用/bin/sh跑
07/04 18:44, 20F

07/04 18:44, , 21F
改#!/bin/bash的話就會用/bin/bash跑
07/04 18:44, 21F

07/04 18:45, , 22F
至於/bin/sh到底是哪種shell...通常會跟login shell一樣,但
07/04 18:45, 22F

07/04 18:46, , 23F
debian/ubuntu就是很顯著的不一樣的例子囧rz
07/04 18:46, 23F

07/04 18:46, , 24F
之前遇到bash與dash之間有個for語法不相容的時候才知道有這
07/04 18:46, 24F

07/04 18:46, , 25F
回事....
07/04 18:46, 25F

07/04 18:47, , 26F
我也是那時候才知道login shell可以跟/bin/sh不一樣囧
07/04 18:47, 26F

07/04 19:03, , 27F
原來如此,值得了!
07/04 19:03, 27F

07/04 21:54, , 28F
sh一定是bourne compatible shell,不可能變成cshell系列
07/04 21:54, 28F

07/04 22:21, , 29F
樓上沒錯...
07/04 22:21, 29F

07/05 00:14, , 30F
應該是 bash 太強一堆擴充語法的關係? XD
07/05 00:14, 30F
文章代碼(AID): #1HqdIYTP (Linux)
文章代碼(AID): #1HqdIYTP (Linux)