我该如何知道自己正在使用哪个shell?

8
我正在编写一个shell脚本。我正在阅读的教程第一行是这样的:#!/usr/bin/env bash/,但它对我不起作用(错误: 没有这个目录)。我该如何找出我正在使用哪个bash以及它的位置在哪里?感谢任何建议和帮助。非常感谢。现在它可以正常工作了解决方案是#!/usr/bin/env bash。另一个问题:为什么它只能读取单词“restart”?我的start.sh代码如下:
#!/usr/bin/env bash/
RESTART="apachectl restart"
$RESTART

它不能工作。

Usage: /usr/local/apache2/bin/httpd [-D name] [-d directory] [-f file]
                                [-C "directive"] [-c "directive"]
                                [-k start|restart|graceful|graceful-stop|sto                                                                             p]
                                [-v] [-V] [-h] [-l] [-L] [-t] [-S]
Options:
-D name            : define a name for use in <IfDefine name> directives
-d directory       : specify an alternate initial ServerRoot
-f file            : specify an alternate ServerConfigFile
-C "directive"     : process directive before reading config files
-c "directive"     : process directive after reading config files
-e level           : show startup errors of level (see LogLevel)
-E file            : log startup errors to file
-v                 : show version number
-V                 : show compile settings
-h                 : list available command line options (this page)
-l                 : list compiled in modules
-L                 : list available configuration directives
-t -D DUMP_VHOSTS  : show parsed settings (currently only vhost settings)
-S                 : a synonym for -t -D DUMP_VHOSTS
-t -D DUMP_MODULES : show all loaded modules
-M                 : a synonym for -t -D DUMP_MODULES
-t                 : run syntax check for config files

为什么会这样呢?它似乎可以读取“重新启动”这个词。

谢谢大家!现在我已经解决了。

解决方案:在Unix中编辑文件(使用vim / nano等,但不要在Windows中编辑)。

Thank again :)
6个回答

15

另一种方法:echo $SHELL


4
如果你从 bash/ 中移除 / ,那么它应该可以工作。

输出:没有这个文件或目录 - Newbie

2
你可以尝试以下命令:
which bash

在一个shell中输入。然后输入


#!<the output of which bash>

是的,我尝试过了。但当我执行 ./start.sh/ 命令时,输出结果为 -bash: ./start.sh: /bin/bash^M: bad interpreter: No such file or directory - Newbie
^M .. 奇妙!你是在Windows中创建了那个文件,对吧?Unix文本文件与Windows文本文件不兼容... 请使用unix2dos进行转换或者在Linux中创建该文件。 - J-16 SDiZ

0

要找出bash的位置,请输入以下命令:

type bash

在你的命令提示符处。为了确保它始终被你的脚本找到,使用以下命令:
#!bash

这种方法存在一个问题,可能会找到并使用其他的Bash,这可能会带来安全问题,但我已经这样做了多年。


我不确定我是否理解你的意思。当我使用那个命令时,它会显示"bash is /bin/bash",那么你的意思是我应该使用"#!/bin/bash"吗? - Newbie
@新手,你肯定可以使用那个。 - user2100815
我使用了这个,但当我运行脚本时,它显示“-bash:./start.sh:/bin/bash ^ M:错误的解释器:没有那个文件或目录”。 - Newbie
@新手,你在脚本中不知怎么加入了回车符号,你用什么编辑器编辑的? - user2100815
Butterworth,非常感谢。我现在知道哪里出了问题了。你说得对,这是由于我编辑的方式造成的。谢谢! - Newbie

0

清除行末的额外字符。无需斜线,并且dos2unix yourscript将删除不必要的回车符。

#!/usr/bin/env bash

0

实际上,更好的做法是为您的重新启动问题开一个新问题。 很可能您不在定义重启命令的目录中,或者重启命令不在您的路径中。尝试输入完整路径。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接