标签: bash

如何编写接受来自文件或标准输入的输入的脚本?

如何编写一个脚本来接受来自文件名参数或标准输入的输入?

例如,您可以使用less这种方式。一个可以执行less filename和等效cat filename | less

有没有一种简单的“开箱即用”的方式来做到这一点?还是我需要重新发明轮子并在脚本中编写一些逻辑?

bash command-line stdin

68
推荐指数
3
解决办法
12万
查看次数

如何在 OSX 上获取 USB 设备的安装路径?

我有一个备份脚本,可以将一些数据备份到 USB 设备。我遇到的问题是 OSX 有时会更改预期的安装路径。例如,如果某个文件被锁定在预期的挂载路径下,OSX 会将其挂载到另一个路径上。名为“BACKUP”的 USB 设备可以安装在 /Volumes/BACKUP-1 而不是 /Volumes/BACKUP。

有没有办法在 OSX 终端中找出 USB 设备的当前挂载路径?像'mount_path BACKUP'(命令是假的)之类的东西,如果设备没有安装,它会返回'/Volumes/BACKUP-1'或什么都不返回?

usb mount bash macos

67
推荐指数
2
解决办法
21万
查看次数

bash 中的 <() 到底是什么(zsh 中的 =() )?

我对 bash 很满意,但最近我换了一个我不知道的替代品。

<(command)bash究竟是什么?它与=(command)zsh中的相比如何?

我知道这与默认文件描述符有关。在我的电脑里

echo <()
Run Code Online (Sandbox Code Playgroud)

Returns /proc/self/fd/11,我发现它是脚本 STDOUT 的副本,但这对我来说似乎仍然很混乱。

linux bash zsh shell

67
推荐指数
2
解决办法
3万
查看次数

如何在管道中使用“sed”

我想替换从 输出的字符串grep,我有:

$ npm info webpack | grep version 
Run Code Online (Sandbox Code Playgroud)

它输出我

$ version: '2.1.0-beta.12',
Run Code Online (Sandbox Code Playgroud)

但我想要:

$ 2.1.0-beta.12
Run Code Online (Sandbox Code Playgroud)

所以我想我可以使用sed并替换不必要的子字符串来实现这一点。但对我来说困难的部分是:

$ npm info webpack | grep version: | sed s/version: /
sed: -e expression #1, char 10: unterminated `s' command
Run Code Online (Sandbox Code Playgroud)

怎样才能达到我的目标?

bash grep sed

66
推荐指数
3
解决办法
17万
查看次数

如何将 bash 数组变量转换为用换行符分隔的字符串?

我想将一个 bash 数组变量写到一个文件中,每个元素都在一个新行上。我可以用 for 循环来做到这一点,但是还有另一种(更干净的)方法来连接元素\n吗?

bash newlines

65
推荐指数
3
解决办法
13万
查看次数

如何在Linux中删除以某个字符串开头的所有文件

我需要NAME在目录树中找到所有以该名称开头的文件,并使用一个 shell 命令删除所有这些文件。

linux bash

65
推荐指数
5
解决办法
19万
查看次数

Cygwin bash 提示在同一行换行

我正在使用 Cygwin bash 提示符,对于长命令,尽管将我的 PS1 设置为简单的“$”,但文本将在同一行上换行而不是转到下一行。

这是一个截图,
截屏

cygwin bash

64
推荐指数
6
解决办法
3万
查看次数

如何有效地使用 Cmd 的选项卡自动完成功能?

我已经在 Linux 上使用 Bash shell 多年了,而且我用它很快。通过经常通过按 Tab 键来请求自动完成,我能够在几次击键中编写长命令。

最近在我的工作中,我开始使用 Windows 命令提示符和 Cmd。我在 Cmd 中很慢。它具有自动完成功能,但工作方式不同。我想我明白它是如何工作的,但我不明白如何有效地使用它,事实上它经常让我慢下来。所以我问,如何有效地使用Cmd的自动完成?


让我举个例子吧。首先,我将描述我如何使用 Bash,然后我如何尝试使用 Cmd,以及出了什么问题。

假设当前目录中的文件夹具有来自大陆和国家的名称,例如。africa-nigeria, asia-india, europe-france, 以及我想将文件夹更改为europe-norway.

Bash 的自动完成的工作方式是,tab 键只有在存在唯一扩展时才会扩展。否则,什么也不会发生,但您可以再次按 Tab 键以列出可能的扩展。

因此,要在 Bash 中移至挪威,我键入cd并进行以下按键操作:

  1. e tab 为了 europe-
  2. n tab (没发生什么事)
  3. tab再次。它列出europe-netherlandseurope-norway作为潜在的扩展。
  4. o tabeurope-norway

伟大的!谢谢巴什。

但是,当我在 Cmd 中尝试相同的键时,它会扩展e tabeurope-albania,这恰好是以“e”开头的第一个文件夹,但这不是我想要的文件夹!我现在怎么办——有没有可能把阿尔巴尼亚变成挪威?或者我必须取消命令Escape并从头开始输入所有内容?

windows bash command-line

64
推荐指数
5
解决办法
8万
查看次数

如何在 Windows 通知音效上禁用 Bash

在 Windows 上运行“在 Ubuntu 上运行 Bash”时,它通常会在键入时生成 Windows 通知声音。常见原因如下:

  • 我使用自动完成命令(选项卡)并且有多个命令选项,
  • 或者当我退格一个已经空的命令行时。

如何禁用这些声音效果?

bash windows-10 windows-subsystem-for-linux windows-10-v1607

64
推荐指数
5
解决办法
4万
查看次数

如何在bash中验证file2比file1新?

如何验证file2上次修改是在 之后file1

在本例中,perl修改时间比stack. 是否有 bash 或 Linux 命令可以根据修改时间比较这些文件?

-rw-r--r--    1 root     root         1577 Sep  7 22:55 stack
-rwxr-xr-x    1 root     root          626 Sep  7 23:10 perl
Run Code Online (Sandbox Code Playgroud)

bash

63
推荐指数
3
解决办法
4万
查看次数