linux 命令是否sh
使用用户当前的 shell,即使不是bash
?例如,假设用户 bob 正在运行 csh。如果我创建一个带有函数和 csh 的脚本并尝试使用以下命令执行它:
sh cshtestscript
这能用 csh 运行吗?
然后假设另一个用户 joe 正在使用 bash。如果我使用函数和 bash 脚本创建另一个脚本并尝试使用以下命令执行它:
sh bashtestscript
这能与 bash 一起运行吗?
答案1
sh
只是一个标准的可执行文件,它始终是特定的 shell。没有什么魔法可以检测出要使用哪个 shell。
% whereis sh
sh: /bin/sh
% ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Mar 29 11:53 /bin/sh -> dash
在 Ubuntu 系统上,/bin/sh
默认情况下,符号链接指向短跑,这是一个最小的 POSIX shell,用于非交互式使用。如果您sh cshtestscript
在 Ubuntu 系统上运行,它将尝试使用 dash 运行脚本。
处理此问题的正确方法是添加舍邦到指示要使用哪个 shell 的脚本,使脚本可执行,并始终将其作为 执行./cshtestscript
。
#!/bin/csh