假设我帐户的默认 shell 是 zsh,但我打开了终端并启动了 bash 并执行了一个名为 的脚本prac002.sh,哪个 shell 解释器将用于执行脚本,zsh 还是 bash?考虑以下示例:
papagolf@Sierra ~/My Files/My Programs/Learning/Shell % sudo cat /etc/passwd | grep papagolf
[sudo] password for papagolf:
papagolf:x:1000:1001:Rex,,,:/home/papagolf:/usr/bin/zsh
# papagolf's default shell is zsh
papagolf@Sierra ~/My Files/My Programs/Learning/Shell % bash
# I fired up bash. (See that '%' prompt in zsh changes to '$' prompt, indicating bash.)
papagolf@Sierra:~/My Files/My Programs/Learning/Shell$ ./prac002.sh
Enter username : Rex
Rex
# Which interpreter did it just use?
Run Code Online (Sandbox Code Playgroud)
**编辑:** 这是脚本的内容
papagolf@Sierra ~/My Files/My Programs/Learning/Shell …Run Code Online (Sandbox Code Playgroud) 我已经读到符合 POSIX 的操作系统(例如:Linux)必须有shshell。
但是它必须sh在/bin目录中,还是可以在任何目录中?
我有一个 shell 脚本,它记录作为参数传递给它的各种程序的性能,以帮助我选择性能最高的一个。相关片段:
#!/usr/bin/env sh
function cal_perf () {
real_t=0
user_t=0
sys_t=0
for (( trial=1 ; trial<=$3 ; ++trial )) ; do
shopt -s lastpipe
/usr/bin/time -f '%e:%S:%U' $1 $2 |& IFS=":" read real sys user
real_t=$(echo "$real + $real_t" | bc)
user_t=$(echo "$user + $user_t" | bc)
sys_t=$(echo "$sys + $sys_t" | bc)
done
real_t=$(echo "scale=2 ; $real_t / $3" | bc)
user_t=$(echo "scale=2 ; $user_t / $3" | bc)
sys_t=$(echo "scale=2 ; $sys_t / $3" | bc)
printf …Run Code Online (Sandbox Code Playgroud)