我想连接到不同的shell (csh、ksh等),并在每个交换的shell中执行命令。
以下是反映我意图的示例程序:
#!/bin/bash
echo $SHELL
csh
echo $SHELL
exit
ksh
echo $SHELL
exit因为,我对Shell脚本不太熟悉,因此需要一个指针来说明如何实现这一点。任何帮助都将不胜感激。
发布于 2015-05-04 12:01:24
如果只想执行一个命令,可以使用-c选项
csh -c 'echo $SHELL'
ksh -c 'echo $SHELL'如果希望在子shell中执行多个命令,甚至执行整个脚本,则可以使用bash的here-document特性,并在子shell上使用-s (从stdin读取命令):
#!/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的语法是否有效。
发布于 2015-05-04 12:00:51
可以使用每个shell提供的命令行选项来运行代码片段。
例如,对于bash,使用-c选项:
bash -c $code
bash -c 'echo hello'zsh和fish也使用-c选项。
其他shell将说明它们在手册页中使用的选项。
发布于 2015-05-04 12:01:04
如果要在bash启动时传递命令,则需要使用-c命令行选项:
#!/bin/bash
# We are in bash already ...
echo $SHELL
csh -c 'echo $SHELL'
ksh -c 'echo $SHELL'https://stackoverflow.com/questions/30029517
复制相似问题