小编use*_*428的帖子

如何在 Mac 上的 /usr/bin 中创建符号链接?

环境:OSX Sierra,Darwin Kernel Version 16.3.0

根本问题:我想在中央存储库中使用一堆 shell 脚本,它们有一个 #!/usr/bin/zsh。在我的 Mac 上,zsh 位于 /bin/zsh 中。

尝试的解决方案:我想创建一个符号链接

ln -s /bin/zsh /usr/bin/zsh
Run Code Online (Sandbox Code Playgroud)

我的用户帐户具有管理员权限,但我不是 root,我不想在这台 Mac 上启用 root 用户。因此我首先做了一个

sudo su
Run Code Online (Sandbox Code Playgroud)

获取具有 root 权限的 shell,然后执行ln命令。但是我仍然收到错误消息ln: /usr/bin/zsh: Operation not allowed

问题:

  • 为什么我会收到此错误消息?

  • 我需要做什么来创建链接?

  • 有没有更好的方法来实现我最初的目标?请注意,修复 #! 线不是一种选择。

sudo shell symbolic-link ln su

14
推荐指数
1
解决办法
2万
查看次数

VisualStudio:自动将制表符变成空格

奇怪的是谷歌没有给出这个问题的答案:

我正在使用 Visual Studio 1.56.0(用户设置),并且希望配置编辑器以在按 Tab 键时输入适当数量的空格,而不是插入物理制表符。

我发现了一些关于这个主题的讨论,我发现的建议包括使用以下之一:

工具->选项->文本编辑器->所有语言->选项卡

首选项 -> 源代码 -> 代码格式

编辑->高级->设置缩进->空格

这些解决方案都不起作用,因为

  • 我没有看到名为“工具”的菜单(我只有文件、编辑、选择、查看、执行、运行、终端和帮助)

  • 我在“文件”菜单下有一个“首选项”项目,但这又没有一个名为“源代码”的条目。

  • “编辑”菜单下没有“高级”项。

(对我来说)找到此类选项的逻辑位置是文件/首选项/文本编辑器/格式,但该部分中没有制表符 - >空格选项。

更新,基于 harrymc 给出的答案:

我知道 Visual Studio Code(我使用的)是与 Visual Studio 不同的文本编辑器。

有趣的是,指向“用户和工作空间设置”的链接显示的屏幕截图看起来与我的 Visual Studio 代码显示的不同:在网站中,“设置”应可用于“用户”或“工作空间”(该名称中有两个选项卡可见)那边的屏幕截图),而在我的编辑器中,“设置”页面仅显示“用户”。但是我不认为这与我的问题有关,因为当我在这些用户设置中选择“常用”并向下滚动时,我确实看到一个名为Editor: Insert Spaces的配置项及其描述

按 T​​ab 时插入空格

这应该正是我正在寻找的选择。但是,它确实设置了复选标记,但我的文件仍然有制表符。

我注意到在这个设置旁边我们可以找到注释:当“编辑器:检测缩进”打开时,此设置将根据文件内容被覆盖。事实上,“检测缩进”也有一个复选标记,我取消了它。

我以为这应该解决问题,但事实并非如此。重复一遍:我知道有

Detect Indentation:  unchecked
Insert Spaces:  checked
Run Code Online (Sandbox Code Playgroud)

我现在创建了一个新文件并键入了一个制表符和一些其他字符,然后保存了该文件。我可以看到新文件中还有一个物理选项卡。

tabs indentation visual-studio-code

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

ffmpeg:提取元数据

我想从 MP3 文件中提取元数据。这将进入脚本,因此我想从命令行执行此操作。由于我已经安装了 ffmpeg,我想我可以用它来实现这个目的。我在这里找到了以下描述:

使用 ffmpeg 提取 ffmetadata 文件如下:

ffmpeg -i INPUT -f ffmetadata FFMETADATAFILE
Run Code Online (Sandbox Code Playgroud)

我尝试过这样的:

ffmpeg -i InSpace.mp3 -f ffmetadata meta.txt
Run Code Online (Sandbox Code Playgroud)

并发现它确实使用meta.txt所需的数据创建,但也将不同格式的元数据转储到stderr,以及错误消息输出文件为空,没有编码(如果使用,请检查 -ss / -t / -frames 参数)。此外,它还会将此分页提示打印到 stderr:

Stream mapping:
Press [q] to stop, [?] for help
Run Code Online (Sandbox Code Playgroud)

然后等我输入一些东西。

当然,我可以通过将命令编写为来解决这个问题

ffmpeg -i InSpace.mp3 -f ffmetadata meta.txt </dev/null 2>/dev/null
Run Code Online (Sandbox Code Playgroud)

但这看起来很不优雅,而且也意味着真正的错误消息也被丢弃了。

我做错了什么?或者,是否有更好的方法从命令行提取元数据?

更新

按照gregg评论中的建议,我尝试了:

ffprobe -show_entries 'stream_tags : format_tags' InSpace.mp3 
Run Code Online (Sandbox Code Playgroud)

这也在 stderr 上产生了大量文本(包括诸如使用哪个 gcc 版本来创建程序之类的信息),而且还将标签转储到 stdout。当然,我可以再次将 stderr 重定向到 /dev/null,虽然输出格式比 ffmpeg 生成的格式稍微不太方便,但获取 stdout 上的信息比 …

metadata ffmpeg ffprobe

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

ffmpeg:创建 mp3 时 -aq 的合理值是多少?

使用 ffmpeg 将音频文件转换为 mp3(使用-acodec libmp3lame)。有一个ffmpeg参数-aq,在帮助中解释为

-aq 质量 设置音频质量(特定于编解码器)

如果我想要获得良好的音频质量,该参数的有意义值是什么?

mp3 ffmpeg

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

使用 jq 从 JSON 数组中提取元素

我有以下 JSON 文件inp.json

{
 "x": 0,
 "tx": [
  {
   "id":  "a",
   "t" : "t for a"
  },
  {
    "id": "b",
    "t": "t for b"
  }
 ]
}
Run Code Online (Sandbox Code Playgroud)

我想提取“tx”中第一次出现的键“t”的值。

我试过

jq -r .tx <inp.json | jq -r '[0].t'
Run Code Online (Sandbox Code Playgroud)

但收到错误消息

断言“cb == jq_util_input_next_input_cb”失败:文件“/usr/src/ports/jq/jq-1.6-1.x86_64/src/jq-1.6/src/util.c”,第371行,函数:jq_util_input_get_position

更新:我也尝试过这些变化

... | jq -r '.[0]t'
Run Code Online (Sandbox Code Playgroud)

... | jq -r '.[0].t'
Run Code Online (Sandbox Code Playgroud)

但前者给出了错误消息jq: error: 语法错误,意外的 IDENT,期待 $end,而后者与我最初的尝试相同的错误。

json jq

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

标签 统计

ffmpeg ×2

ffprobe ×1

indentation ×1

jq ×1

json ×1

ln ×1

metadata ×1

mp3 ×1

shell ×1

su ×1

sudo ×1

symbolic-link ×1

tabs ×1

visual-studio-code ×1