环境: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。
问题:
为什么我会收到此错误消息?
我需要做什么来创建链接?
有没有更好的方法来实现我最初的目标?请注意,修复 #! 线不是一种选择。
奇怪的是谷歌没有给出这个问题的答案:
我正在使用 Visual Studio 1.56.0(用户设置),并且希望配置编辑器以在按 Tab 键时输入适当数量的空格,而不是插入物理制表符。
我发现了一些关于这个主题的讨论,我发现的建议包括使用以下之一:
工具->选项->文本编辑器->所有语言->选项卡
首选项 -> 源代码 -> 代码格式
编辑->高级->设置缩进->空格
这些解决方案都不起作用,因为
我没有看到名为“工具”的菜单(我只有文件、编辑、选择、查看、执行、运行、终端和帮助)
我在“文件”菜单下有一个“首选项”项目,但这又没有一个名为“源代码”的条目。
“编辑”菜单下没有“高级”项。
(对我来说)找到此类选项的逻辑位置是文件/首选项/文本编辑器/格式,但该部分中没有制表符 - >空格选项。
更新,基于 harrymc 给出的答案:
我知道 Visual Studio Code(我使用的)是与 Visual Studio 不同的文本编辑器。
有趣的是,指向“用户和工作空间设置”的链接显示的屏幕截图看起来与我的 Visual Studio 代码显示的不同:在网站中,“设置”应可用于“用户”或“工作空间”(该名称中有两个选项卡可见)那边的屏幕截图),而在我的编辑器中,“设置”页面仅显示“用户”。但是我不认为这与我的问题有关,因为当我在这些用户设置中选择“常用”并向下滚动时,我确实看到一个名为Editor: Insert Spaces的配置项及其描述
按 Tab 时插入空格
这应该正是我正在寻找的选择。但是,它确实设置了复选标记,但我的文件仍然有制表符。
我注意到在这个设置旁边我们可以找到注释:当“编辑器:检测缩进”打开时,此设置将根据文件内容被覆盖。事实上,“检测缩进”也有一个复选标记,我取消了它。
我以为这应该解决问题,但事实并非如此。重复一遍:我知道有
Detect Indentation: unchecked
Insert Spaces: checked
Run Code Online (Sandbox Code Playgroud)
我现在创建了一个新文件并键入了一个制表符和一些其他字符,然后保存了该文件。我可以看到新文件中还有一个物理选项卡。
我想从 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 上的信息比 …
使用 ffmpeg 将音频文件转换为 mp3(使用-acodec libmp3lame
)。有一个ffmpeg参数-aq
,在帮助中解释为
-aq 质量 设置音频质量(特定于编解码器)
如果我想要获得良好的音频质量,该参数的有意义值是什么?
我有以下 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,而后者与我最初的尝试相同的错误。