Questions tagged «shell»

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


2
Bash的“ for”循环中没有“ in foo bar ...”部分
最近,我正在查看一些使我感到困惑的代码,因为它可以正常工作,而且我没想到会这样。该代码简化为该示例 #!/bin/bash for var; do echo "$var" done 使用命令行参数运行时将其打印出来 $ ./test a b c a b c 正是这一点,(对我而言)是意料之外的。为什么var未定义就不会导致错误?使用这种做法是否被认为是“好的做法”?


3
CTRL + C时删除^ C
在Red Hat Enterprise Linux 6(“圣地亚哥”)附带的外壳中按+ ^C时,有什么方法可以删除?我有权编辑自己的。CTRLC.bash_profile
25 shell 

2
什么是实现流程替代的可移植(POSIX)方法?
一些shell(例如bash)支持Process Substitution,这是一种将过程输出显示为文件的方式,如下所示: $ diff <(sort file1) <(sort file2) 但是,此构造不是POSIX,因此不可移植。如何处理替代的实现POSIX -友好的方式(即其中一个在工作/bin/sh)? 注意:问题不是问如何区分两个排序的文件-这只是一个演示流程替换的人为例子!

2
在文本编辑器中打开命令提示符-这叫什么?
在Bash中我最喜欢的技巧之一是在文本编辑器中打开命令提示符时。我通过按来执行此操作(在vi模式下)ESC v。执行此操作后,命令提示符中的所有内容现在都会显示在我选择的$ EDITOR中。然后,我可以像编辑文档一样编辑该命令,并在保存和退出该临时文件中的所有内容时执行该命令。 令我惊讶的是,我的朋友们都没有听说过此提示,因此我一直在寻找可以共享的文档。问题是我还找不到任何东西。另外,与此技巧相关的搜索字词非常常见,因此在谷歌搜索文档时无济于事。 有人知道这种技术叫什么,以便我可以实际查找吗?

2
函数,别名和可执行文件中的连字符是否存在问题?
在我的测试中(在Bash和Z Shell中),我发现定义函数或别名或名称中带有连字符的可执行Shell脚本没有问题,但是我不确定在所有Shell和所有用例中都可以做到这一点。 我想这样做的原因是连字符比下划线更容易键入,因此更快捷,更流畅。 我不敢相信这不是问题的一个原因是,在某些语言(例如Ruby)中,即使连字符之间没有空格,连字符也会被解释为减号。如果在某些shell中可能会发生类似的事情,这也不会令我感到惊讶,在连字符中连字符被解释为即使没有空格也会发出信号。 我有点怀疑的另一个原因是我的文本编辑器搞砸了带有连字符的函数的语法高亮显示。(但是,当然,这很可能只是shell脚本的语法高亮显示配置中的一个错误。) 有什么理由避免连字符吗?
25 bash  shell  zsh  ksh  csh 

4
带路径包含空格和通配符的字符串的Bash脚本错误
我无法了解Bash脚本编写的基础知识。这是我到目前为止的内容: #!/bin/bash FILES="/home/john/my directory/*.txt" for f in "${FILES}" do echo "${f}" done 我要做的就是.txt在for循环中列出所有文件,以便我可以对它们进行处理。但是中的my directory星号和中的空格*.txt不能很好地播放。我试过使用带双引号和不带双引号,带或不带大括号的变量名,但仍然无法打印所有.txt文件。 这是非常基本的事情,但是我仍然在努力,因为我累了并且无法直截了当。 我究竟做错了什么? 如果我的文件没有空格或星号,我已经能够成功应用上面的脚本...我不得不尝试使用或不使用双引号和花括号来使其正常工作。但是,当我同时拥有空格和星号时,一切都变得混乱了。

3
shellcheck建议不要使用basename:为什么?
我正在尝试shellcheck。 我有这样的东西 basename "${OPENSSL}" 我得到以下建议 Use parameter expansion instead, such as ${var##*/}. 从实际的角度来看,我认为没有区别 $ export OPENSSL=/opt/local/bin/openssl $ basename ${OPENSSL} openssl $ echo ${OPENSSL##*/} openssl 由于basename是POSIX规范中的内容,因此我不认为这是最佳实践。有什么提示吗?


2
从变量中删除所有空格,制表符,换行符等?
这是我遇到的错误,由于一个变量的值应该为2(我使用a来获取)而失败select * from tabel。我在该变量中得到空格。 + 0 != 2 ./setjobs[19]: 0: not found. 如何从该变量中删除所有这些空格或换行符?灿tr,sed或什么帮助? 这是我在做什么: set_jobs_count=$(echo "set heading off; select count(*) from oppar_db where ( oppar_db_job_name, oppar_db_job_rec ) in ($var) ;" | \ sqlplus -s ${OP_ORA_USER}/${OP_ORA_PASS}@$OPERATIONAL_DB_NAME) 如建议的那样工作: | sed 's/[[:space:]]//g' 但是我仍然获得像这样的值: set_jobs_count= 2
25 shell  sed  tr  whitespace  newlines 

6
有没有一种方法可以将bash中的历史记录列表的大小设置为5000行以上?
这个问题是从Stack Overflow 迁移过来的,因为可以在Unix&Linux Stack Exchange上回答。 迁移 8年前。 无论我将HISTSIZE环境变量设置为大于5000 多少,使用history内置功能打印历史记录列表时,它只会打印最后的5000条命令。我之所以需要它,是因为我通常有一个.bash_history超过5000行的大行,有时需要通过按来解决早期命令Ctrl-R,但是如果该命令早于5000行,那么我将无法使用该机制进行访问。我知道我可以grep在上使用.bash_history,但是我认为该Ctrl-R机制会更快(更方便)。我使用gnu bash 4.1版。 那就是我的.bashrc文件的全部内容: #!/bin/bash # ~/.bashrc: executed by bash(1) for non-login shells. # see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) # for examples # If not running interactively, don't do anything [ -z "$PS1" ] && return # don't put duplicate lines …
25 linux  bash  shell 



6
如何递归地反向检查权限?
有一个命令,我认为它是apache附带的,或者某种程度上与其相关的命令,它一直检查权限。所以,如果我有/home/foo/bar/baz,它会告诉我什么权限是baz,bar,foo,和home。有谁知道这个命令是什么或另一种方式呢?该命令基本上从参数开始,并且一直到/告诉您权限是什么的方式工作,以便您可以查看是否存在权限问题。

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.