Questions tagged «shell»

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

1
在shell脚本中避免“ BASH-isms”
是否存在类似于Perl :: Critic的工具,该工具将检查您的Shell脚本并指出缺陷,可移植性问题,使用无故障的非标准程序,使用折旧的程序等? 我意识到这set -o posix将禁用非POSIX用法,但这不会告诉我我想知道的事情,例如zsh索引从1开始的shell数组,从0开始的bash索引,以及ash根本不支持数组。
37 bash  shell  zsh  ash 

12
如何快速存储和访问常用命令?
我有很多日常需要执行的命令,通常只有很小的变化。 现在,我将它们全部存储起来.bash_history并使用CTRL- R访问它们,但是我想知道是否有更好的方法。我在寻找什么: 轻松添加新命令 易于搜索并重新执行所需的命令 避免建议中不必要的命令 不幸的是,bash_history在第三个需求上并不是那么强大:如果我做了几个cdand ls,它将迅速填充历史文件。我最近了解到HIST_SIZE,您可以配置历史记录以避免重复或某些命令,但是在配置所有这些之前,我想确保这是最好的方法。

2
寻找匹配的“”“时出现意外的EOF-bash脚本
我只是写了一个bash脚本,并且总是收到这个EOF错误。 所以这是我的脚本(仅适用于OS X): #!/bin/bash #DEFINITIONS BEGIN en_sq() { echo -e "Enabling smart quotes..." defaults write NSGlobalDomain NSAutomaticQuoteSubstitutionEnabled -bool true status=$(defaults read NSGlobalDomain NSAutomaticQuoteSubstitutionEnabled -bool) if [ "$status" = "1" ] then echo -e "Success! Smart quotes are now enabled." SUCCESS="TRUE" else echo -e "Sorry, an error occured. Try again." fi …
37 bash  shell 


2
ls没有--zero或-0选项是有原因的吗
这个问题是由有关ls' -1选项' 和人们反复提出问题的倾向的问题引起的,包括处理...的输出ls。 对输出的这种重用ls似乎是可以理解的,例如:如果您知道如何对文件列表进行排序,则ls可能希望以这种方式将输出用作其他输入。 如果这些问与答不包括对由良好表现的文件名组成的文件名列表的引用(没有空格和换行符之类的特殊字符),则通常会有人指出它们,指出存在该命令序列不起作用的危险是带有换行符,空格等的文件。 find,sort和其他实用程序解决通信“困难”的文件名如问题xargs通过选项的文件名与NUL字符/字节这是不是在文件名中的合法字符分隔(唯一一个除/?)上Unix / Linux文件系统。 我查看了手册页,ls并找到的输出ls --help(列出了更多选项),但找不到ls(来自coreutils)有一个选项来指定NUL分隔的输出。它确实有一个-1选项,可以解释为“用换行符分隔的输出文件名”) 问:是否有技术或哲学上的原因,为什么ls没有一个“ --zero或” -0选项会“输出以NUL分隔的文件名”? 如果您执行的操作仅输出文件名(而不使用eg -l),那么可能会有意义: ls -rt -0 | xargs -r0 … 我可能会遗漏一些为什么它不起作用的原因,或者这个示例是否有我忽略的替代方法,它没有那么复杂和/或晦涩难懂。 附录: 这样做ls -lrt -0可能没有多大意义,但在以同样的方式find . -ls -print0不对,所以这不是一个理由不提供-0/ -z/ --zero选项。
37 shell  command-line  ls 

5
如何使用查找重命名多个文件
我想使用命令find命令重命名多个文件(file1 ... filen到file1_renamed ... filen_renamed): find . -type f -name 'file*' -exec mv filename='{}' $(basename $filename)_renamed ';' 但是得到这个错误: mv: cannot stat ‘filename=./file1’: No such file or directory 这不起作用,因为文件名未解释为外壳变量。
37 shell  find 

1
我们是否应该在bash / shell脚本中使用UTF-8字符(如⏰)?
如果使用bash以下命令启动,则这里的简单代码可以在我的机器上按预期工作: function ⏰(){ date } ⏰ 使用此工具的其他人可能会遇到问题,还是通用? 我想知道,因为到目前为止,我从未在其他源代码中看到过类似的东西。 编辑:有无限的可能性,例如,可以通过使用表情符号来快速区分功能角色。 💣表示可以修改或删除文件的内容,a表示正在进行的工作,📃表示交互式菜单... 我想我们应该为所有这些创建一个标准,但这似乎是一个有趣的想法。 也许〜5个字符的随机行可以帮助我们了解代码的功能。(当然,我们需要学习如何阅读它们。) 更多编辑:我正在试一试。现在,如果我在编辑器(Or cat myscript.sh|grep function)中折叠所有函数,它们将看起来像这样。(geany与此处相比,我的unicode在终端中看起来要好得多。) function ⬚_1(){ function ⬚⬚_2(){ function ⬚⬚⬚_📃_D(){ function ⬚⬚⬚⬚_📃_X(){ function ⬚⬚⬚⬚⬚_📃_Y(){ function ⬚⬚⬚⬚⬚⬚_❓_P(){ function ⬚⬚⬚⬚_📃_Z(){ function ⬚⬚⬚⬚⬚_❓_U(){ function ⬚⬚⬚⬚⬚_❓_O(){ 我使用一个奇怪的缩进⬚来展示功能之间的相互关系,并使用符号📃/❓来清楚地区分它们的作用。(当然,这些不是我的真实函数名称,我只是在最后加上一个随机字母,但是即使没有它们,我们也可以清楚地看到它们之间的关系。)
36 bash  shell  unicode 

3
为什么打开文件比读取可变内容快?
在bash脚本中,我需要/proc/文件中的各种值。到目前为止,我有数十行代码直接像这样对文件进行grep: grep -oP '^MemFree: *\K[0-9]+' /proc/meminfo 为了提高效率,我将文件内容保存在一个变量中并对其进行grep化: a=$(</proc/meminfo) echo "$a" | grep -oP '^MemFree: *\K[0-9]+' 与其多次打开文件,不如将其打开一次并grep变量内容,我认为这会更快-但实际上它更慢: bash 4.4.19 $ time for i in {1..1000};do grep ^MemFree /proc/meminfo;done >/dev/null real 0m0.803s user 0m0.619s sys 0m0.232s bash 4.4.19 $ a=$(</proc/meminfo) bash 4.4.19 $ time for i in {1..1000};do echo "$a"|grep ^MemFree; done …

2
对bash脚本使用.sh还是.bash扩展名?
(有关Ubuntu-OSX兼容性以及易用性和POSIX,请参阅使用#!/ bin / sh或#!/ bin / bash) 如果我希望我的脚本使用bash shell,使用.bash扩展名是否确实会调用bash还是取决于系统配置/ 1st shebang行。如果两者都有效但又不同,哪个优先? 我不确定是否要以.sh结束我的脚本以仅指示“ shell脚本”,然后让第一行选择bash shell(例如#!/usr/bin/env bash),还是仅以.bash结尾(以及第1行设置) )。我希望bash被调用。
36 bash  shell  shebang 


3
在bash脚本中哪个更惯用:true`或`|| :`?
我并没有做太多的shell脚本编写工作,因此在阅读文档git submodule时我感到有些惊讶,并且看到了它们在本文档中使用的语法: 任何子模块中命令的非零返回都会导致处理终止。可以通过添加|| :到命令末尾来覆盖它。 我必须查找这|| :是强制命令成功退出的简写。每当我必须成功退出命令时,我都会使用|| true。被|| :认为更惯用吗?
36 bash  shell 


9
从外壳输出“好莱坞黑客现场”
这似乎是一个奇怪的问题,但是您将用什么来创建典型的好莱坞黑客入侵场景? 我从一个朋友那里得到了这个请求,我的大脑一片空白。我所能想到的就是《黑客帝国》等电影中的所有nmap场景。 但这需要在具有默认OSX的Mac上完成,我认为它具有* nix的风格,对吗?他们无法访问互联网,因此无需使用外部工具进行准备。 我当时正在考虑编写等效于/ var / log / messages到屏幕的路线...
36 shell 

4
如何删除特定文件夹中具有特定扩展名的所有文件?
如果我将当前目录/工作目录(使用导航到它cd)设置为某个特定目录,然后键入: rm *.xvg 该命令将做什么?这是真的,上面的命令将只删除文件扩展名为.xvg 只有在工作目录? 在询问之前,我对此很紧张,因为我想绝对确定上面的命令将只删除位于工作目录中的.xvg文件。
36 bash  shell  directory  rm 

7
断开连接后如何恢复外壳
我正在远程CentOS 5.6机器上做一些工作,而我的网络却不断下降。重新连接后,是否可以恢复挂起的会话? 编辑:正在使用yum进行一些更新和安装,并且担心如果进程在进行中的过程中不断挂起,则可能会出现问题。

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.