首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为Termux中的路径创建“重写”

如何为Termux中的路径创建“重写”
EN

Unix & Linux用户
提问于 2022-10-29 22:35:46
回答 1查看 144关注 0票数 0

问题

我在Termux上,在Termux上它不是/usr,它是/data/data/com.termux/files/usr

这有时会导致运行脚本(主要是bash和make)时出现问题,而这些脚本的设计并不考虑Termux。

我的意图

每次脚本想要从/usr开始在path上打开文件时,我都希望它被“重写”到有效的路径。

解决这一问题的任何其他解决办法也是受欢迎的。

EN

回答 1

Unix & Linux用户

发布于 2022-10-30 02:19:38

简单的答案是“使用sed将脚本中所有出现的/usr更改为/data/data/com.termux/files/usr”。例如:

代码语言:javascript
复制
sed -i -e 's=/usr=/data/data/com.termux/files/usr=g' *.sh

问题是:如果部分或全部/usr路径已经更改为/data/data/.../usr,那么它们将再次被更改,最终成为/data/data/com.termux/files/data/data/com.termux/files/usr。例如:

代码语言:javascript
复制
$ echo /usr | sed -e 's=/usr=/data/data/com.termux/files/usr=g'
/data/data/com.termux/files/usr

$ echo /data/data/com.termux/files/usr | sed -e 's=/usr=/data/data/com.termux/files/usr=g'
/data/data/com.termux/files/data/data/com.termux/files/usr

要解决这个问题,只有当/usr前面有空格或行的开头时,才允许更改它:

代码语言:javascript
复制
$ echo /data/data/com.termux/files/usr | sed -e 's=\(^\|[[:space:]]\)/usr=\1/data/data/com.termux/files/usr=g'

或者用扩展的正则表达式稍微读一些:

代码语言:javascript
复制
$ echo /data/data/com.termux/files/usr | sed -E -e 's=(^|[[:space:]])/usr=\1/data/data/com.termux/files/usr='
/data/data/com.termux/files/usr

下面这篇文章是在我想起....left之前写的,因为它是有用的信息,我不想删除它,我不想删除它:

或者,您也可以使用一个名为“消极展望”的regex功能。不幸的是,sed不支持向后看(*)。

Perl确实支持四舍五入,所以如果您已经在termux中安装了perl,那么您可以使用它(我上次使用Termux已经很长时间了,所以我不记得它是否包含了基本perl。这当然是一个可安装的包)。例如:

代码语言:javascript
复制
perl -i -p -e 's=(?

(顺便说一句,perl的-p选项与sed类似,它是一个修改stdin或文件的工具。使用它的-n选项,perl的工作方式类似于sed -n。这是有意的-这种perl的使用意味着它是一种替代sed工具,用perl的全部功能来增强)。

或者,如果任何alpha-数值字符或/字符(S)紧跟在/usr之前,则负面展望可以避免更改D15:

代码语言:javascript
复制
perl -i -p -e 's=(?

您可以在下面看到,只有当/usr本身发生变化时,它才会被更改:

代码语言:javascript
复制
$ echo /usr | perl -pe 's=(?

(*)我知道的sed的唯一版本是Super或塞塞 (主页目前不起作用)。ssed似乎是被抛弃的--它已经很多年没有更新了--它是基于GNU 3.02从1998年开始的,而当前的GNU在2020年是4.8版。ssed是为Debian打包的,因此可能也适用于Termux。但是,如果要安装它,最好还是使用perl。

无论如何,ssed有一个-R选项,允许它使用与Perl兼容的正则表达式PCRE

代码语言:javascript
复制
$ echo /data/data/com.termux/files/usr | ssed -R 's=(?
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/722963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档