Questions tagged «stdin»

stdin是进程的默认输入文件描述符的名称。由于“ stdin”确实没有什么特别的,所以您*不应该*使用该标签。使用[io-redirection]标记来询问有关如何重定向输入的问题,使用[file-descriptor]来解决有关如何管理文件描述符的问题,使用[lock]来解决文件锁定的问题,以及使用[files]来解决有关以下问题的一般性问题:文件操作。

9
如何永远以优雅的方式无所事事?
我有一个程序,可以在上产生有用的信息,stdout但也可以读取stdin。我想将其标准输出重定向到文件,而不在标准输入上提供任何内容。到目前为止,一切都很好:我可以做到: program > output 而且不要在tty中做任何事情。 但是,问题是我想在后台执行此操作。如果我做: program > output & 程序将被挂起(“暂停(tty输入)”)。 如果我做: program < /dev/null > output & 该程序立即终止,因为它达到了EOF。 似乎我需要的是插入program不确定的时间内不做任何事情并且不读取的内容stdin。以下方法起作用: while true; do sleep 100; done | program > output & mkfifo fifo && cat fifo | program > output & tail -f /dev/null | program > output & 但是,这一切都非常丑陋。有有是一种优雅的方式,使用标准的Unix工具,到“什么都不做,无限期”(意译man …


2
将数据管道传输到进程的标准输入而不会导致EOF之后
我有一个启动用户交互外壳的可执行文件。我想在启动Shell时首先注入一些命令,然后允许用户进行交互式会话。我可以使用以下命令轻松完成此操作echo: echo "command 1\ncommand 2\ncommand3" | ./shell_executable 这几乎可行。问题在于,在回显我的命令后,正在馈送进程的stdin的echo命令会击中EOF。此EOF导致外壳程序立即终止(就像您在外壳程序中按Ctrl + D一样)。 有没有一种方法可以将这些命令注入到stdin中,而不会在之后引起EOF?


6
如何使python程序的行为像适当的unix工具?
我周围有一些Python脚本,我正在重写它们。我对他们所有人都有同样的问题。 对于我来说,如何编写程序以使其像适当的unix工具一样运作尚不明显。 因为这 $ cat characters | progname 和这个 $ progname characters 应该产生相同的输出。 我在Python中找到的最接近的东西是fileinput库。不幸的是,我并没有真正看到如何重写我的Python脚本,所有这些看起来像这样: #!/usr/bin/env python # coding=UTF-8 import sys, re for file in sys.argv[1:]: f = open(file) fs = f.read() regexnl = re.compile('[^\s\w.,?!:;-]') rstuff = regexnl.sub('', fs) f.close() print rstuff 如果有标准输入,fileinput库处理标准输入,如果有文件,则处理文件。但是它遍历单行。 import fileinput for line in fileinput.input(): process(line) 我真的不明白。我想如果您要处理的是小文件,或者您对文件的处理不多,这似乎很明显。但是,就我的目的而言,这比仅打开整个文件并将其读取为字符串要慢得多,如上所述。 …


3
在前一个命令写入STDOUT时在STDIN中键入另一个命令是否安全?
也许以前已经回答了这个问题,欢迎您链接到另一个答案... 如果我执行一个shell命令(在一个bashshell中),如下所示: make 然后,当输出make是通过从滚动STDOUT的的make命令,如果我输入make check并按enter之前的第一个命令执行完毕,当make命令终于完成下一个命令make check将选择权并运行。 我的问题很简单: 这危险吗? 这种紧急输入是否有潜在的意外行为? 为什么这样做会起作用?
21 bash  shell  stdout  stdin 

3
如何将密码传递给mysql命令行
我将MySQL密码保存在文件中foo.php,例如P455w0rd,当我尝试使用它时: $ cat foo.php | grep '$dbpwd=' | cut -d '"' -f 2 | mysql -U root -p mydb -h friendserver Enter password: (holds) $ echo P455w0rd | mysql -u root -p mydb -h friendserver Enter password: (holds) 这两个选项仍要求输入密码,从哪发送密码的正确方法是stdin什么?
20 password  mysql  stdin 

3
nohup:忽略输入并将stderr重定向到stdout
我正在使用nohup下面提到的在后台启动我的应用程序- root@phx5qa01c:/bezook# nohup java -jar ./exhibitor-1.5.1/lib/exhibitor-1.5.1-jar-with-dependencies.jar -c file --fsconfigdir /opt/exhibitor/conf --hostname phx5qa01c.phx.qa.host.com > exhibitor.out & [1] 30781 root@phx5qa01c:/bezook# nohup: ignoring input and redirecting stderr to stdout 但是每次我看到此消息时- nohup: ignoring input and redirecting stderr to stdout 如果看到此消息,会有任何问题吗?这是什么意思,我该如何避免?

4
为什么有些命令不从标准输入中读取?
我想知道什么时候应该使用管道,什么时候不应该使用管道。 举例来说,要终止处理pdf文件的某些进程,使用管道将无法执行以下操作: ps aux | grep pdf | awk '{print $2}'|kill 相反,我们只能通过以下方式做到这一点: kill $(ps aux| grep pdf| awk '{print $2}') 要么 ps aux | grep pdf | awk '{print $2}'| xargs kill 根据man bash(版本4.1.2): The standard output of command is connected via a pipe to the standard input of command2. …
19 shell  pipe  arguments  stdin 

4
创建实际上是命令的虚拟文件
有什么方法可以创建虚拟文件,从而从文件中读取实际上是从stdout命令的读取中;写入文件就是stdin通过命令写入? 到目前为止,我已经inotifywait在文件上加上了一个错误,当文件被修改时,该命令会调用命令,并从文件中获取输入并写回。 我不喜欢inotifywait但是必须不断重新启动(并且我必须确保它始终在运行)。我可能每周只使用一次此文件。
18 files  stdin 

3
vim:通过命令行参数强制使用特定语法
当我想轻松阅读PostgreSQL模式时,我将其转储到stderr并重定向到vim: pg_dump -h localhost -U postgres dog_food --schema-only | vim - 这给出: vim 没有语法高亮显示模式,因为从stdin读取时没有文件扩展名,因此我使用以下代码: :set syntax=sql 这使: 作为vim一名懒惰的开发人员,我想通过传递命令行参数来强制使用SQL语法,从而避免了set syntax=<whatever>每次打开stdin数据时重新键入代码的麻烦。 有没有一种方法可以vim通过传递命令行参数来设置语法?

3
如何“删除”名为“-”的文件?
我不小心创建了一个名称为-(例如seq 10 > -)的文件。然后我尝试使用less它来查看它,但是它只是挂起了。 我知道发生这种情况是因为less -期望从输入stdin,所以它不会将解释-为文件名。我试过了,less \-但是也不行。 那么,有没有办法表明less它-是文件而不是stdin? 我能得到的最好的是: find -name '-' -exec less {} +
17 less  stdin 

3
将stdout开到stderr吗?
我想将stdout从一个进程发送到另一个进程的stdin,而且还发送到控制台。例如,将stdout发送到stdout + stderr。 例如,我git edit别名如下: git status --short | cut -b4- | xargs gvim --remote 我希望将文件名列表也发送到屏幕xargs。 那么,有没有类似tee的工具可以做到这一点?这样我可以做类似的事情: git status --short | \ cut -b4- | almost-but-not-quite-entirely-unlike-tee | \ xargs gvim --remote

1
使程序首先从管道读取,然后从键盘读取
考虑交互式程序interactive。我必须相当频繁地运行该程序,并且每次运行它时,前几个命令都是相同的。显然,不得不一遍又一遍地键入这些命令是很痛苦的。我已经在文件中收集了这些命令(用换行符分隔)cmd。现在,我可以cat cmd | interactive运行命令了。问题是,一旦cmd被完全读取,就会interactive收到EOF并退出。 我想做的是首先interactive从管道中读取(显然interactive < cmd也可以接受),并且在收到EOF时,改为从键盘开始读取。
17 command-line  pipe  cat  stdin 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.