小编Ras*_*los的帖子

shebang中的多个参数

我想知道是否有通过 shebang 行 ( #!)将多个选项传递给可执行文件的通用方法。

我使用 NixOS,在我编写的任何脚本中,shebang 的第一部分通常是/usr/bin/env. 然后我遇到的问题是系统将其后的所有内容解释为单个文件或目录。

例如,假设我想编写一个脚本以bash在 posix 模式下执行。写shebang的天真方式是:

#!/usr/bin/env bash --posix
Run Code Online (Sandbox Code Playgroud)

但是尝试执行生成的脚本会产生以下错误:

/usr/bin/env: ‘bash --posix’: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我知道这篇文章,但我想知道是否有更通用和更清洁的解决方案。


编辑:我知道对于Guile脚本,有一种方法可以实现我想要的,在手册的第 4.3.4 节中记录:

 #!/usr/bin/env sh
 exec guile -l fact -e '(@ (fac) main)' -s "$0" "$@"
 !#
Run Code Online (Sandbox Code Playgroud)

这里的技巧是,第二行(以 开头exec)被解释为代码,sh但是,在#!...!#块中,作为注释,因此被 Guile 解释器忽略。

难道不能将此方法推广到任何解释器吗?


第二次编辑:在玩了一会儿之后,似乎对于可以从中读取输入的解释器,stdin以下方法可以工作:

#!/usr/bin/env sh
sed '1,2d' "$0" | bash --verbose --posix …
Run Code Online (Sandbox Code Playgroud)

scripting environment-variables posix arguments shebang

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

有没有办法将大多数键绑定更改为更熟悉的内容?

most 寻呼机很好,但它的默认键绑定与其他任何键绑定都不一样。

由于我不想为我的寻呼机学习一套全新的键绑定(无论它多么花哨和美妙),有没有办法让most热键感觉更像viless以及其他?

pager keyboard-shortcuts most

13
推荐指数
1
解决办法
1338
查看次数

在 mutt 中使用替代文件选择器

mutt 中,是否可以使用vifmranger等文件浏览器(可能在tmux拆分中)而不是默认文件浏览器来选择要附加到电子邮件的文件?

mutt

13
推荐指数
1
解决办法
926
查看次数

bash 命令以明确的形式打印字符串

我想知道是否存在bash以某种方式打印字符串的命令,以公开它包含的特殊字符。

例如,假设a=$'\a\0\b\e'; 是否存在\a\0\b\e从字面上打印的函数$a

到目前为止,我最接近的是使用以下l命令sed

echo "$a"  | sed -n 'l'
Run Code Online (Sandbox Code Playgroud)

它返回\a\000\b\033$,但表示法与内部的表示法不同,$''如果字符串包含换行符,则不起作用。

bash string

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

管道命令何时停止?

我很难理解以下命令的效果:

yes | tee hello | head
Run Code Online (Sandbox Code Playgroud)

在我的笔记本电脑上,“hello”中的行数约为 36000 行,远高于标准输出上显示的 10 行。

我的问题是:

  • yes,以及更一般地说,管道中的命令何时停止?

  • 为什么上面两个数字不匹配。是因为tee没有将行一一传递到管道中的下一个命令吗?

command-line pipe

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