Questions tagged «shell»

Shell是Unix的命令行界面。您可以交互地在外壳程序中键入命令,也可以编写脚本来自动执行任务。使用此标记可解决适用于/ bin / sh和大多数兼容shell(ash,bash,ksh,zsh等)的问题。对于有错误的Shell脚本,请在此处发布之前在http://shellcheck.net中对其进行检查。

1
在终端中可以有vim键绑定吗?
我已经习惯了vim绑定(例如按w转到单词,按dw删除单词,等等),以及它的模式(插入,正常,视觉),出于好奇,我想知道:这里有一些这种行为方式的实现以及从vim到我的终端的绑定? 有插入模式,普通模式等...
42 bash  shell  terminal  vim  zsh 

5
环境变量到底是什么?
我知道这VARIABLE=value会创建一个环境变量,并export VARIABLE=value使它可用于当前shell创建的进程。env显示当前的环境变量,但是它们住在哪里?什么包括环境变量(或就此而言,环境)?

10
如何检查管道是否为空,如果不是,则对数据运行命令?
我已经在bash脚本中通过管道传递了一条线,并希望在将其提供给程序之前检查管道是否具有数据。 我发现有关搜索,test -t 0但在这里不起作用。始终返回false。那么如何确保管道中有数据呢? 例: echo "string" | [ -t 0 ] && echo "empty" || echo "fill" 输出: fill echo "string" | tail -n+2 | [ -t 0 ] && echo "empty" || echo "fill" 输出: fill 有别于标准/规范方式来测试上述管道是否产生了输出?输入需要保留,以将其传递给程序。这概括了如何将输出从一个进程传递到另一个进程,但仅在第一个进程具有输出时才执行?重点是发送电子邮件。
42 bash  shell  pipe 


1
导出的外壳变量与未使用bash的外壳变量之间的区别
Bash似乎可以区分已导出和未导出的变量。 例: $ FOO=BAR $ env | grep FOO $ set | grep FOO FOO=BAR set看到变量,但env看不到。 $ export BAR=FOO $ env | grep FOO BAR=FOO $ set | grep FOO BAR=FOO FOO=BAR set查看两个变量,但env仅查看导出的变量。 我知道那set是内置的bash,env不是。 导出的变量与未导出的变量之间有什么区别?


4
如何使用nohup执行多个命令
我需要使用执行多个命令nohup。每个命令应在上一个命令之后执行。 我以以下命令为例: nohup wget $url && wget $url2 > /dev/null 2>&1 & 但是,该命令不起作用。 我应该为此使用什么命令?

4
如何退出或取消错误的bash命令?
我希望对此有所帮助,但是我找不到任何答案。看起来应该是如此明显。有时,当我在bash终端中键入错误的命令时,光标只会跳到下一行而没有任何错误或任何其他情况。我不能说我做错了什么。就像我被程序卡住了。重新制定: $ tidy 我:“糟糕!这不是我要输入的内容...” :q 我:“那没用...” :exit :quit exit quit /exit /quit -exit -quit -wtf??? 我知道我搞砸了,但是如何在不关闭终端的情况下返回提示?

3
如何从未知的shell切换到bash?
令我感到惊讶的是,我还没有在网站上找到这个问题。因此,今天$是我以新用户身份登录后出现的。这是意外的,因为主要用户的提示以开头username@computername:~$。 那么,如何从另一个shell切换到bash?
41 shell 

5
将文件的内容重定向到命令“ echo”
我有一个名为my_file.txt的文件,其内容只是字符串Hello。如何将其内容重定向到命令echo? 我知道我有命令less,cat,more...但我需要做它用echo。 我尝试了这个: $ cat my_file.txt | echo 还有这个: $ echo < my_file.txt 但是在两种情况下,它在标准输出中仅显示为空白,而my_file.txt的内容中则没有。 我该怎么办?


7
如何使用sed -i(就地编辑)实现可移植性?
我正在为服务器编写Shell脚本,该服务器是运行FreeBSD的共享主机。我还希望能够在运行Linux的PC上本地测试它们。因此,我试图以一种可移植的方式编写它们,但是sed我看不到这样做的方法。 我的网站的一部分使用了生成的静态HTML文件,此sed行在每次重新生成后插入正确的DOCTYPE: sed -i '1s/^/<!DOCTYPE html> \n/' ${file_name.html} 它sed在Linux上可以与GNU一起使用,但是FreeBSD sed希望-ioption 后的第一个参数是备份副本的扩展名。它是这样的: sed -i '' '1s/^/<!DOCTYPE html> \n/' ${file_name.html} 但是,GNU sed依次期望表达式在之后-i。(它也需要使用换行符进行修复,但这已在此处得到解答) 当然,我可以将此更改包含在脚本的服务器副本中,但这会很混乱,即我使用VCS进行版本控制。有没有办法以完全可移植的方式使用sed实现此目的?


7
我怎么还记得如何使用重定向?
我知道 program > /dev/null 2>&1 做。它将输出重定向到,/dev/null并2>&1意味着将错误输出重定向到发送输出的同一位置。 我的问题是我总是不得不用谷歌搜索它,因为我不记得了。 所以,我尝试&2>1,1>2&,1>&2...我尝试各种组合,直到我google一下... 容易记住的诀窍是什么?
40 shell 

5
如何定义要获取的Shell脚本无法运行
我正在定义用户应该source而不是执行的shell脚本。 是否有常规或智能的方式来提示用户这种情况,例如通过文件扩展名? 我是否可以在文件本身中编写外壳代码,这将导致该文件回显消息并在执行而不是源代码时退出,以便我可以帮助用户避免这一明显的错误?
40 bash  shell 

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.