我有一個使用process substitution
差異,當符號鏈接使用
的腳本是一個shell腳本:
#!/bin/bash
while read line
do
echo "$line"
done < <(grep "^abcd$" file.txt)
當我運行使用sh file.sh
我得到以下輸出腳本
$sh file.sh
file.sh: line 5: syntax error near unexpected token `<'
file.sh: line 5: `done < <(grep "^abcd$" file.txt)'
當我使用bash file.sh
運行腳本時,該腳本起作用。
有趣的是,sh
是映射到/bin/bash
的soft-link
。
$ which bash
/bin/bash
$ which sh
/usr/bin/sh
$ ls -l /usr/bin/sh
lrwxrwxrwx 1 root root 9 Jul 23 2012 /usr/bin/sh -> /bin/bash
$ ls -l /bin/bash
-rwxr-xr-x 1 root root 648016 Jul 12 2012 /bin/bash
我測試,以確保符號鏈接被跟隨在我的外殼採用了以下內容:
$ ./a.out
hello world
$ ln -s a.out a.link
$ ./a.link
hello world
$ ls -l a.out
-rwx--x--x 1 xxxx xxxx 16614 Dec 27 19:53 a.out
$ ls -l a.link
lrwxrwxrwx 1 xxxx xxxx 5 May 14 14:12 a.link -> a.out
我無法理解爲什麼sh file.sh
不作爲/bin/bash file.sh
因爲sh
執行是一個符號鏈接/bin/bash
。
任何見解將不勝感激。謝謝。
我猜你是不執行的bash,因爲'/ bin'在'$ PATH'中的'/ usr/bin'之前,'/ bin'中有'sh'程序。 – Lennart
但是'哪個sh'顯示'/ bin/sh'指向'/bin/bash'...thus不應該是'/ bin/bash'被執行?謝謝 – Bill
嗯。但很明顯,sh和bash不執行相同的程序。 – Lennart