许多面向编程的编辑器都会对源代码进行着色。是否有一个命令可以为在终端中查看的源代码着色?
我可以打开一个文件emacs -nw(它在终端中打开而不是弹出一个新窗口),但我正在寻找类似的东西less(或者可以使用 less -R,它在输入中通过颜色转义序列)。
我正在尝试使用由find. 没什么特别的,就是这样:
$ myscript `find . -name something.txt`
Run Code Online (Sandbox Code Playgroud)
问题是一些路径名包含空格,因此它们在参数扩展时被分解为两个无效名称。通常我会用引号将名称括起来,但在这里它们是由反引号扩展插入的。我试过find用引号过滤每个文件名的输出和周围,但是当 bash 看到它们时,剥离它们为时已晚,它们被视为文件名的一部分:
$ myscript `find . -name something.txt | sed 's/.*/"&"/'`
No such file or directory: '"./somedir/something.txt"'
Run Code Online (Sandbox Code Playgroud)
是的,这是如何处理命令行的规则,但我该如何解决呢?
这很尴尬,但我没有想出正确的方法。我终于想出了如何使用xargs -0 -n 10000...但它是如此丑陋的黑客,我仍然想问:我如何引用反引号扩展的结果,或者以另一种方式实现相同的效果?
编辑:我感到困惑的是,事实xargs 确实收集所有参数到一个单一的参数列表,除非它告诉别人,否则或系统限制可能被超过。感谢大家让我直截了当!其他人,在阅读已接受的答案时请记住这一点,因为它没有直接指出。
我已经接受了答案,但我的问题仍然存在:是否有某种方法可以保护反引号(或$(...))扩展中的空格?(请注意,接受的解决方案是非 bash 答案)。
有时我想对文本文件进行较小的编辑(例如,修复拼写错误),但我想保持其修改时间不变。(动机:modtime 对于按时间顺序列出目录、告知文件内容最后一次实质性更新的时间等很有用。我不希望通过简单的编辑来删除此信息。)
这当然是可能的:Unix 允许我手动将 modtime 设置为我想要的任何内容(这确实将 ctime 设置为现在,这对我来说没问题)。例如,使用touch -t <time>、 或utimes(2)系统调用。这个问题是关于一种简单的方法来编辑文件,然后将修改时间设置为编辑前的时间。我主要对与编辑器无关的解决方案感兴趣,即,如果 emacs 有命令save-file-no-update-mtime,那很有趣,但不是我正在寻找的。
请注意:虽然这个问题本质上与这个链接问题相同,但我没有将其标记为“解决我的问题”,因为那里提供的答案不是很令人满意。我在下面接受的答案更清晰、更简单。看一看!
我知道如何传递bash自定义命令来执行,例如:
bash -c "/bin/echo hello"
Run Code Online (Sandbox Code Playgroud)
当我这样做时,bash执行参数-c然后退出。我怎样才能让它在我完成后给我一个交互式提示?添加-i没有效果。我不想将自定义命令写入.bashrc始终读取的文件中。
我一直在凑合bash -c "commands; exec bash -i",但它并不理想,因为它开始了bash两次。有没有办法在bash只启动一次时获得相同的效果?
我想运行一系列测试(每个测试在不同的 PID 上),并且仅当所有测试成功退出时才得出成功状态。就像是
check $PID1 && check $PID2 && check $PID3
Run Code Online (Sandbox Code Playgroud)
但对于不确定数量的测试。我怎样才能做到这一点?