我搜索的所有结果最终都与hostname
或 有关uname -n
。我查找了两者的手册,寻找偷偷摸摸的选项,但没有运气。
我试图scutil --get ComputerName
在 Linux 系统上找到等效的 OSX 。在 Mac OS X 上,计算机名称用作计算机的人类可读标识符;它显示在各种管理屏幕中(例如,库存管理、基于 Bonjour 的远程访问等)并用作默认主机名(经过过滤处理空格等)。
在本页提出的第二种方法中,可以使用以下命令获取运行 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 来避免这种情况。
我读到写这样的东西很糟糕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) 我安装的一个软件在我的个人资料中插入了一行,内容如下:
[ -s "$SOME_FILE" ] && \. "$SOME_FILE"
Run Code Online (Sandbox Code Playgroud)
我知道 dot.
与 同义source
,所以我怀疑这只是采购文件,但我以前从未见过\.
;它会做其他事情吗?
编辑,关于 DV:搜索“反斜杠点”会导致有关./
何时调用可执行文件的问题,并man source
导致\.
未出现的联机帮助页。我不知道还能尝试什么,因此这个问题。
编辑2:查看相关问题
脚本通常以 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
?
我想创建一个符号链接,~/foo/
但是当我写它时,~
总是解析到绝对主路径。我过去使用过../
s 并且它们工作正常,这是~
不允许的吗?
我想这样做的原因是因为~
根据机器和 Linux/OSX 具有不同的绝对路径,但始终指向我的主目录。
我想在跨多台机器同步的 git repo 中包含这样一个链接。
我在 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
命令然后在彩色输出上运行,因此似乎无法匹配排除模式。
显然我可以在没有颜色的情况下运行第一次搜索,然后一切都会正常进行,但是如果有办法解决这个问题,我更愿意保留它们?
我找到了一个关于如何创建虚拟硬盘的非常好的教程,我正在考虑在我的工作中使用这些教程,以便可靠地和可移植地存储具有相关处理结果的大型数据集。
基本上,本教程包括这样做:
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,有没有办法“动态”调整虚拟磁盘的大小?(动态我的意思是除了创建一个新的更大的磁盘并复制数据。)
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 directory
grep
我正在尝试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)
然后我得到正确的元素数量。这是为什么?