difference between sh and bash when symlink is used -
i have shell script uses process substitution
the script is:
#!/bin/bash while read line echo "$line" done < <( grep "^abcd$" file.txt ) when run script using sh file.sh following output
$sh file.sh file.sh: line 5: syntax error near unexpected token `<' file.sh: line 5: `done < <( grep "^abcd$" file.txt )' when run script using bash file.sh, script works.
interestingly, sh soft-link mapped /bin/bash.
$ bash /bin/bash $ 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 i tested make sure symbolic links being followed in shell using following:
$ ./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 i unable understand why sh file.sh not execute /bin/bash file.sh since sh symbolic link /bin/bash.
any insights appreciated. thanks.
when invoked sh, bash enters posix mode after startup files read. process substitution not recognized in posix mode. according posix, <(foo) should direct input file named (foo). (well, is, according reading of standard. grammar ambiguous in many places.)
edit: bash manual:
the following list what’s changed when ‘posix mode’ in effect: ... process substitution not available.
Comments
Post a Comment