小编Jon*_*n H的帖子

如何获取计算机名称(不是其主机名)?

我搜索的所有结果最终都与hostname或 有关uname -n。我查找了两者的手册,寻找偷偷摸摸的选项,但没有运气。

我试图scutil --get ComputerName在 Linux 系统上找到等效的 OSX 。在 Mac OS X 上,计算机名称用作计算机的人类可读标识符;它显示在各种管理屏幕中(例如,库存管理、基于 Bonjour 的远程访问等)并用作默认主机名(经过过滤处理空格等)。

linux hostname

34
推荐指数
4
解决办法
10万
查看次数

如何获取运行 bash 的 tty?

本页提出的第二种方法中,可以使用以下命令获取运行 bash 的 tty:

ps ax | grep $$ | awk '{ print $2 }'
Run Code Online (Sandbox Code Playgroud)

我想这肯定有点懒惰,列出所有正在运行的进程只是为了提取其中一个进程。这样做会不会更有效率(我也在问这是否会引入不良影响):

ps -p $$ | tail -n 1 | awk '{ print $2 }'
Run Code Online (Sandbox Code Playgroud)

仅供参考,我遇到了这个问题,因为有时第一个命令实际上会产生两行(或更多行)。这会随机发生,当有另一个进程使用包含$$子字符串的 PID 运行时。在第二种方法中,我通过请求我知道我想要的 PID 来避免这种情况。

bash ps tty

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

迭代存储在变量中的多行字符串

读到写这样的东西很糟糕for line in $(command),正确的方法似乎是:

command | while IFS= read -r line; do echo $line; done
Run Code Online (Sandbox Code Playgroud)

这很好用。但是如果我想要迭代的是变量的内容,而不是命令的直接结果呢?

例如,假设您创建了以下文件quickfox

The quick brown
foxjumps\ over -
the
lazy ,
dog.
Run Code Online (Sandbox Code Playgroud)

我希望能够做这样的事情:

# This is just for the example,
# I could of course stream the contents to `read`
variable=$(cat quickfox);
while IFS= read -r line < $variable; do echo $line; done; # this is incorrect
Run Code Online (Sandbox Code Playgroud)

bash read

29
推荐指数
1
解决办法
5万
查看次数

反斜杠点作为命令是什么意思?

我安装的一个软件在我的个人资料中插入了一行,内容如下:

[ -s "$SOME_FILE" ] && \. "$SOME_FILE"
Run Code Online (Sandbox Code Playgroud)

我知道 dot.与 同义source,所以我怀疑这只是采购文件,但我以前从未见过\.;它会做其他事情吗?

编辑,关于 DV:搜索“反斜杠点”会导致有关./何时调用可执行文件的问题,并man source导致\.未出现的联机帮助页。我不知道还能尝试什么,因此这个问题。

编辑2:查看相关问题

bash

20
推荐指数
2
解决办法
3250
查看次数

脚本可以作为子 shell 运行吗?

脚本通常以 shebang 开头,例如#!/usr/bin/env bash,它指定要用于执行的 shell。shebang 不存在时的执行行为似乎取决于调用 shell。无论哪种方式,脚本都是从“新”shell 运行的,该 shell 不知道调用 shell 中定义的变量和函数。

或者,也可以将脚本source放入 shell 中,根据我的理解,这相当于将脚本内容复制粘贴到当前 shell 中。如果脚本中定义了任何函数或变量,那么它们在“执行”后将保留在调用 shell 中,这可能是不可取的。

这两个选项之间有什么关系吗?是否可以将脚本作为调用 shell 的子 shell 来执行,这样我们就可以访问调用 shell 中定义的所有内容,但不会修改它(除非可能使用export这样的命令)?

写作(source myscript.sh)似乎就是我所追求的;这是正确的做法吗?是否有一个等效的 shebang 可以通过调用来产生相同的行为./myscript.sh

scripting shell-script subshell

10
推荐指数
1
解决办法
1375
查看次数

在符号链接目标中使用 ~ 或使用变量创建符号链接

我想创建一个符号链接,~/foo/但是当我写它时,~总是解析到绝对主路径。我过去使用过../s 并且它们工作正常,这是~不允许的吗?

我想这样做的原因是因为~根据机器和 Linux/OSX 具有不同的绝对路径,但始终指向我的主目录。

我想在跨多台机器同步的 git repo 中包含这样一个链接。

environment-variables symlink home

8
推荐指数
1
解决办法
3252
查看次数

过滤grep的彩色输出

我在 OSX 上,但我怀疑这对这个问题没有太大影响。在我的 中.bash_profile,我grep默认使用别名获取颜色输出:

alias grep='grep --color=always'
Run Code Online (Sandbox Code Playgroud)

我通常以类似于以下方式在我的存储库中的文件中搜索内容:

grep --include=*.cpp -Ern . -e "(foo|bar)"
Run Code Online (Sandbox Code Playgroud)

但我经常想进一步优化结果,通常用 say 管道grep -v "colorbar"

问题是第二个grep命令然后在彩色输出上运行,因此似乎无法匹配排除模式。

显然我可以在没有颜色的情况下运行第一次搜索,然后一切都会正常进行,但是如果有办法解决这个问题,我更愿意保留它们?

grep colors

6
推荐指数
1
解决办法
4688
查看次数

调整虚拟硬盘驱动器的大小

我找到了一个关于如何创建虚拟硬盘的非常好的教程,我正在考虑在我的工作中使用这些教程,以便可靠地和可移植地存储具有相关处理结果的大型数据集。

基本上,本教程包括这样做:

dd if=/dev/zero of=MyDrive.vhd bs=1M count=500
mkfs -t ext3 MyDrive.vhd
mount -t auto -o loop MyDrive.vhd /some/user/folder
Run Code Online (Sandbox Code Playgroud)

它创建了一个 500MB 的 ext3 格式的虚拟硬盘驱动器并将其安装在某处。

现在说我使用该文件并意识到我需要超过 500MB,有没有办法“动态”调整虚拟磁盘的大小?(动态我的意思是除了创建一个新的更大的磁盘并复制数据。)

filesystems dd mkfs

5
推荐指数
2
解决办法
1385
查看次数

真实当前目录

显然我知道pwdand readlink,但是有没有一个命令可以找出当前目录的真正绝对路径(即解析链接和点)?

pwd readlink

3
推荐指数
1
解决办法
1954
查看次数

小bash脚本的问题

find当我在某处进行更改时,我经常在我的代码项目中运行,我必须找到它影响其他代码片段的位置,所以我想写一个非常小的脚本来简化它,称之为blah.sh

#!/bin/bash -eu

if [ $# -ne 3 ]; then
    echo "Three inputs required"
else
    find $1 -name $2 -exec grep -iHn $3 {} \;
fi
Run Code Online (Sandbox Code Playgroud)

问题是,当第三个参数(我要查找的文本)包含空格时,我会收到错误消息。例如,为每个试图探索的文件blah . '*.php' 'foo bar'返回。我确定这是一个愚蠢的错误,我并没有真正接触过 bash..grep: bar: No such file or directorygrep

grep find bash-script

0
推荐指数
1
解决办法
109
查看次数

为什么zsh中IFS需要echo才能生效?

我正在尝试PATH使用 zsh 5.8 将 的成员读入数组。我习惯使用 Bash,通常可以执行以下操作:

IFS=: p=($PATH)
Run Code Online (Sandbox Code Playgroud)

然而,对于 zsh,这实际上给了我一个只有一项的数组。如果我改写:

IFS=: p=($(echo $PATH))
Run Code Online (Sandbox Code Playgroud)

然后我得到正确的元素数量。这是为什么?

zsh array echo

0
推荐指数
1
解决办法
475
查看次数