różnica między sh i bash, gdy używane jest dowiązanie symboliczne
Mam skrypt powłoki, który używaprocess substitution
Skrypt jest:
#!/bin/bash
while read line
do
echo "$line"
done < <( grep "^abcd$" file.txt )
Po uruchomieniu skryptu za pomocąsh file.sh
Otrzymuję następujące dane wyjściowe
$sh file.sh
file.sh: line 5: syntax error near unexpected token `<'
file.sh: line 5: `done < <( grep "^abcd$" file.txt )'
Po uruchomieniu skryptu za pomocąbash file.sh
, skrypt działa.
Co ciekawe,sh
jestsoft-link
zmapowane do/bin/bash
.
$ 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
Testowałem, aby upewnić się, że w mojej powłoce śledzone są dowiązania symboliczne, korzystając z następujących:
$ ./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
Nie jestem w stanie zrozumieć dlaczegosh file.sh
nie działa jak/bin/bash file.sh
odsh
jest dowiązaniem symbolicznym do/bin/bash
.
Wszelkie spostrzeżenia będą bardzo mile widziane. Dzięki.