Questions tagged «shell»

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

3
如何使用inotifywait监视目录以创建特定扩展名的文件
我已经看到了这个答案。 您应该考虑使用inotifywait作为示例: inotifywait -m /path -e create -e moved_to | while read path action file; do echo "The file '$file' appeared in directory '$path' via '$action'" # do something with the file done 我的问题是,上面的脚本监视目录以创建任何类型的文件,但是如何修改inotifywait命令以仅在创建了某种类型/扩展名的文件(或移动到目录中)时报告?.xml创建任何文件时报告。 我尝试过的是: 我已经运行了inotifywait --help命令,并且已经阅读了命令行选项。它具有--exclude <pattern>和--excludei <pattern>命令可以排除某些类型的文件(通过使用regEx),但是我需要一种方法来仅包括某些类型/扩展名的文件。

1
在Linux中'ln -sf'是什么意思?
我有两个问题。第一个是为了-sf选项,第二个是选项的更具体用法-f。 通过谷歌搜索,我找出了command ln,option 的描述-s和-f。 (从http://linux.about.com/od/commands/l/blcmdl1_ln.htm复制) -s, --symbolic : make symbolic links instead of hard links -f, --force : remove existing destination files 我个人理解这些选项。但是,如何同时使用此选项-s和-f选项?-s用于创建链接文件,-f并用于删除链接文件。我不了解这种情况,以及为什么使用此合并选项。 为了进一步了解ln命令,我举了一些例子。 $ touch foo # create sample file $ ln -s foo bar # make link to file $ vim bar # check how link file works: …
21 shell  ln 


3
如何从外壳“正确”启动应用程序
我很难精确地表达问题,但我会尽力而为。我使用dwm默认的窗口管理器dmenu作为我的应用程序启动器。除了浏览器外,我几乎不使用GUI应用程序。我的大部分工作都是直接从命令行完成的。此外,我非常热衷于有关操作系统,应用程序等的极简主义。我从未遗弃的工具之一是应用程序启动器。主要是因为我对应用程序启动器的工作方式/工作方式缺乏确切的了解。即使是广泛的互联网搜索也只能显示模糊的解释。我想做的就是摆脱我的应用程序启动器,因为除了实际生成应用程序之外,我对此完全没有用。为了做到这一点,我真的很想知道如何从外壳“正确”启动应用程序。因此,“正确”的含义可以近似为“像应用程序启动程序那样”。 我知道以下几种从shell生成进程的方法: exec /path/to/Program 用指定的命令替换shell而不创建新进程 sh -c /path/to/Program 启动依赖于外壳的进程 /path/to/Program 启动依赖于外壳的进程 /path/to/Program 2>&1 & 启动外壳独立进程 nohup /path/to/Program & 启动独立于Shell的进程并将输出重定向到 nohup.out 更新1:我可以举例说明在不同条件下dmenu从重复调用到重新构造它的方法ps -efl。它产生一个新的shell,/bin/bash并作为该shell的子级应用程序/path/to/Program。只要孩子在身边,壳就会在附近。(如何管理它超出了我的范围...)相反,如果您nohup /path/to/Program &从shell 发出,/bin/bash则该程序将成为该shell的子级,但如果退出该shell,则该程序的父级将是最高级的进程。因此,如果第一个进程例如是/sbin/init verbose并且已经存在,PPID 1那么它将成为程序的父级。这里就是我试图用一个图表来解释:chromium推出通过dmenu,firefox使用推出exec firefox & exit: systemd-+-acpid |-bash---chromium-+-chrome-sandbox---chromium-+-chrome-sandbox---nacl_helper | | `-chromium---5*[chromium-+-{Chrome_ChildIOT}] | | |-{Compositor}] | | |-{HTMLParserThrea}] | | |-{OptimizingCompi}] | | `-3*[{v8:SweeperThrea}]] | |-chromium | …
21 shell  exec 

4
什么是“ IFS”?
我正在阅读此线程:如何循环遍历文件行? 什么IFS啊 在for-loops 上下文中它的用法是什么?
21 bash  shell 



6
如何移动前x个文件
我有一个包含数千个无序文件的巨大文件夹。通过mv命令将前5000个移动到子文件夹是否可行?现在我用 mv *some_pattern* ./subfolder1/ 到目前为止,我非常随机地移动图像,如果每个子文件夹中没有完全5000个文件,这并不重要。有更好的方法吗?

5
输出两个文本文件的公共行(相似性)(与diff相反)?
Diff是显示两个文件之间的更改的好工具。但是如何显示两个文本文件的相似性(同时忽略差异)呢? 即样本输入: a: Foo Bar X Hello World 42 b: Foo Baz Hello World 23 伪输出(类似这样): @@ 2,3 =Hello World 仅对两个文件进行排序并使用comm是不够的,因为在这种情况下,行信息会丢失。


4
调用程序时是否有POSIX(或至少是流行的)实用程序来设置当前工作目录?
我们有env(1)来修改我们要运行的命令的环境(例如env MANPAGER=more man dtrace)。除了修改要在其中启动命令的目录之外,是否有类似内容? 理想情况下,我希望它看起来像这样: theMagicCommand /new/cwd myProgram 这样,它可以与其他类似env(1)的命令“链接”,例如, daemon -p /tmp/pid env VAR=value theMagicCommand /new/cwd myProgram 到目前为止,我可以想到以下解决方案,不幸的是,该解决方案没有与env(1)相同的接口: cd /new/cwd && myProgram 另外,我可以像这样创建一个简单的shell脚本: #! /bin/sh - cd "${1:?Missing the new working directory}" || exit 1 shift exec "${@:?Missing the command to run}" 但是我正在寻找已经存在的东西(至少在macOS和FreeBSD上)。 myProgram不一定是桌面应用程序(在这种情况下,我可以只使用.desktop文件中的Path键)。
20 shell  freebsd  cwd 

1
为什么“#!/ bin / sh -a”中的-a影响sed而“ set -a”却不影响?
如果我运行以下.sh文件: #!/bin/sh -a echo "a" | sed -e 's/[\d001-\d008]//g' 结果是一个错误: sed:-e表达式#1,字符18:无效的范围结尾 但是,如果我运行以下.sh文件: #!/bin/sh set -a echo "a" | sed -e 's/[\d001-\d008]//g' 它运行没有错误。第二个代码不是应该等同于第一个吗?为什么在第一个错误?

2
为什么“命令1> file.txt 2> file.txt”的行为与“命令1> file.txt 2>&1”不同?
当您要将stdout和stderr都重定向到同一文件时,可以使用command 1>file.txt 2>&1或来实现command &>file.txt。但是,为什么行为command 1>file.txt 2>file.txt与以上两个命令不同? 以下是验证命令。 $ cat redirect.sh #!/bin/bash { echo -e "output\noutput" && echo -e "error" 1>&2; } 1>file.txt 2>&1 { echo -e "output\noutput" && echo -e "error" 1>&2; } 1>file1.txt 2>file1.txt { echo -e "error" 1>&2 && echo -e "output\noutput"; } 1>file2.txt 2>file2.txt { echo -e …


2
嵌套的双引号在投票很高的单行代码中
一个具有> 3.5K票数的StackOverflow 答案具有此一类功能,可用于分配给DIR当前bash脚本的目录: DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" 我对嵌套的双引号感到困惑。据我所知,以下片段被双引号括起来: "$( cd " "${BASH_SOURCE[0]}" " && pwd )" ...,而=()$( dirname和())右边的其他所有内容均未引用。换句话说,我假设第二,第四和第六个"字符分别“关闭”了第一,第三和第五个"字符。 我知道"${BASH_SOURCE[0]}"实现了双引号,但是其他两对双引号的目的是什么? 另一方面,(尽管获得较高的投票分数)上述片段不正确,那么实现其名义意图的正确方法是什么? (按名义意图,我的意思是:将pwd第一个cd-ing 之后的返回值收集到由返回的目录中dirname "${BASH_SOURCE[0]}",并cd在子外壳中执行-ing,以便$PWD父外壳的保持不变。)

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.