相关疑难解决方法(0)

哪个 shell 解释器运行一个没有 shebang 的脚本?

假设我帐户的默认 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)

shell bash zsh shell-script shebang

23
推荐指数
2
解决办法
1万
查看次数

“sh”是否必须在“/bin”目录中?

我已经读到符合 POSIX 的操作系统(例如:Linux)必须有shshell。

但是它必须sh/bin目录中,还是可以在任何目录中?

linux shell posix

17
推荐指数
2
解决办法
7404
查看次数

脚本不能与 shebang“/usr/bin/env sh”一起使用,但可以与“/usr/bin/env bash”一起使用,尽管 sh 指向 bash?

我有一个 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)

shell bash

3
推荐指数
2
解决办法
2102
查看次数

标签 统计

shell ×3

bash ×2

linux ×1

posix ×1

shebang ×1

shell-script ×1

zsh ×1