首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Shell脚本外壳

Shell脚本外壳
EN

Stack Overflow用户
提问于 2015-05-04 11:55:29
回答 4查看 1.7K关注 0票数 4

我想连接到不同的shell (csh、ksh等),并在每个交换的shell中执行命令。

以下是反映我意图的示例程序:

代码语言:javascript
复制
#!/bin/bash
echo $SHELL
csh
echo $SHELL
exit
ksh
echo $SHELL
exit

因为,我对Shell脚本不太熟悉,因此需要一个指针来说明如何实现这一点。任何帮助都将不胜感激。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-05-04 12:01:24

如果只想执行一个命令,可以使用-c选项

代码语言:javascript
复制
csh -c 'echo $SHELL'
ksh -c 'echo $SHELL'

如果希望在子shell中执行多个命令,甚至执行整个脚本,则可以使用bash的here-document特性,并在子shell上使用-s (从stdin读取命令):

代码语言:javascript
复制
#!/bin/bash
echo "this is bash"

csh -s <<- EOF
    echo "here go the commands for csh"
    echo "and another one..."
EOF
echo "this is bash again"
ksh -s <<- EOF
    echo "and now, we're in ksh"
EOF

请注意,您不能轻松地通过echo $SHELL检查您所处的shell,因为父shell 这个变量展开为文本/././bash。如果要确保子shell工作,则应检查特定于shell的语法是否有效。

票数 3
EN

Stack Overflow用户

发布于 2015-05-04 12:00:51

可以使用每个shell提供的命令行选项来运行代码片段。

例如,对于bash,使用-c选项:

代码语言:javascript
复制
bash -c $code
bash -c 'echo hello'

zshfish也使用-c选项。

其他shell将说明它们在手册页中使用的选项。

票数 1
EN

Stack Overflow用户

发布于 2015-05-04 12:01:04

如果要在bash启动时传递命令,则需要使用-c命令行选项:

代码语言:javascript
复制
#!/bin/bash
# We are in bash already ...
echo $SHELL

csh -c 'echo $SHELL'
ksh -c 'echo $SHELL'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30029517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档