On Thu, Feb 18, 2016 at 11:06:37PM +0700, Robert Parker wrote: > The script: > #/bin/bash > # testlink.sh > # must be run as root > > file1="$1" > shift > mandir=/usr/local/share/man/man3/ > cp "$file1" "$mandir" > cd "$mandir"
You MUST check the result of cd. If it fails but you continue on, you will be operating in the wrong place. > echo '$hash = '"$#" > while (( "$#" )); do > file2="$1" > ln "$file1" "$file2" > shift > done > > Results: > >> sudo ./testlink.sh readfile.3 readtextfile.3 > $hash = 1 > ./testlink.sh: 11: ./testlink.sh: 1: not found > >> As near as I can tell, you are somehow running this script under sh instead of bash. wooledg@wooledg:~$ cat foo #!/bin/bash while (( "$#" )); do shift done wooledg@wooledg:~$ ./foo wooledg@wooledg:~$ sh ./foo ./foo: 2: ./foo: 0: not found Maybe you forgot to give it execute permissions, and therefore sudo runs sh for you or something. That's just a wild guess. (Can't reproduce that on my system.) But whatever the reason, the behavior you're seeing is fully consistent with executing it under the wrong shell.