我想编写一些简单的脚本来自动执行一些连续启动几个脚本的操作。然后在顶层 shell 中设置一些别名。
问题:这些命令中的几个会启动新的 shell。而该命令之后的所有命令都在前一个 shell 中启动。有没有办法将这些命令排在“顶层”shell 中的命令之后?
简单示例:
#!/usr/bin/ksh
#normally this ksh is executed deep inside other script i cannot modify
ksh
echo test
有没有办法在刚通过 ksh 命令启动的 shell 上打印“test”?通常 test 打印在前一个 shell 中 - 在“exit”命令后可用 感谢您的帮助。
答案1
有四种替代方案,但每种方案都有缺点:
确保要在 ksh 中执行的命令已写入文件
mycmds
并以以下形式启动 ksh:cat mycmds /dev/tty | ksh -i
退税:您将失去 ksh 的命令行编辑功能。
确保您要在 ksh 中执行的命令已写入文件;在启动之前
/tmp/mycmds$$
将环境变量设置MYCMDS
为;并将以下内容添加到您的:/tmp/mycmds$$
ksh -l
$HOME/.profile
if [ -n "$MYCMDS" ] ; then . "$MYCMDS" MYCMDS= export MYCMDS fi
退税:每一个使用这个程序的人都必须修改他的
$HOME/.profile
。将整个过程组织起来,将要执行的命令写入一个文件
mycmds
,然后. mycmds
通过最初的shell. 将所有这些放入函数定义中。退税:您无需启动新 shell,只需修改初始 shell 的环境和/或别名定义即可。使用此程序的每个人都必须使用 ksh。
确保要执行的命令已写入文件
mycmds
并启动狂欢形式如下:bash -i --init-file mycmds
退税:您得到的是 bash 而不是 ksh。