将文本插入bash脚本

时间:2019-01-12 05:01:16

标签: linux bash oracle

我的用户登录后,我需要手动输入以下内容,因此我试图创建一个脚本来为我做

. oraenv

该应用要求我输入,所以我输入“ M40”(每次输入相同的文本)

然后我必须运行linux应用程序以启动我的工作环境。

所以我如何自动输入M40,然后按Enter键

2 个答案:

答案 0 :(得分:3)

from requests import get from requests.exceptions import RequestException from contextlib import closing from bs4 import BeautifulSoup def simple_get(url): """ Attempts to get the content at `url` by making an HTTP GET request. If the content-type of response is some kind of HTML/XML, return the text content, otherwise return None. """ try: with closing(get(url, stream=True)) as resp: if is_good_response(resp): return resp.content else: return None except RequestException as e: log_error('Error during requests to {0} : {1}'.format(url, str(e))) return None def is_good_response(resp): """ Returns True if the response seems to be HTML, False otherwise. """ content_type = resp.headers['Content-Type'].lower() return (resp.status_code == 200 and content_type is not None and content_type.find('html') > -1) def log_error(e): """ It is always a good idea to log errors. This function just prints them, but you can make it do anything. """ print(e) 脚本提示输入oraenv的值,因此您可以将自己设置为ORACLE_SID或其他地方。

.profile

它还有一个标志,可以将其设置为非交互式:

export ORACLE_SID=M40

特别是关于管道输入,必须编写脚本来处理它,例如使用ORAENV_ASK=NO 或诸如read之类的命令而没有文件名。有关更多详细信息,请参见Pipe input into a script。但是,这不是标准cat的编码方式(假设这是您正在使用的脚本)。

答案 1 :(得分:0)

我不确定这些操作是否能为您提供帮助。

echo M40 | . oraenv

此人使用echo管道。

printf M40 | . oraenv

此人将printf用于管道。在某些情况下,使用echoprintf不同,但是我不知道它们的实际区别。

. oraenv <<< M40

此人使用Here String(很抱歉,使用ABS作为参考),是Heredoc的简化形式。

. oraenv < <(echo M40)

此人使用Process Substitution,您可能会看到https://superuser.com/questions/1059781/what-exactly-is-in-bash-and-in-zsh区别于上一个。

expect -c "spawn . oraenv; expect \"nput\"; send \"M40\r\n\"; interact"

此人使用expect进行自动输入,在许多情况下具有更大的可扩展性。请注意,请根据您的实际情况更改expect \"nput\"部分。