Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
 Linux_IT技术博客_编程技术问答 - 「Fatal编程技术网」

Linux 在提示下使输入的命令加粗

这是我当前在by.bashrc中的PS1提示符定义: PS1='\[\033[01;33m\]★ \[\033[01;30m\]\w \[\033[32m\]\$ \[\033[m\]' 我的命令提示符工作得很好,我喜欢它,但我想补充一点。我真的希望能够输入文本(提示下的命令)粗体 我知道我可以将最后一个转义码更改为: \[\033[01m\] 这将使我输入的命令提示符文本变为粗体,但它也会对输入的命令的输出进行有趣(不希望)的处理 有没有办法做到这一点?如果是,怎么做? 我正在Ubuntu

Linux 如何为世界地图创建不同的缩放级别

我们正在开发一个类似于谷歌地图的应用程序。我们能够成功地将图像从服务器传输到clent。我们希望为传输到客户端的图像提供缩放功能。我们的应用程序使用Ubuntu 谢谢 -Roy你可以看看OpenStreetMap,他们在OSM项目中基本上实现了你想要的功能。@Roy-如果你们能够开发出与谷歌地图一样好的服务,那么你们也应该能够自己解决这个问题。你们这些人看起来像是策划人

linux内核是否抢占?

Linux内核是否抢占 理解Linux内核第二版和第三版之间有很大区别。在第二篇文章中写到Linux内核不是抢占式的,但在同一段的第三篇文章中没有提到任何内容。取决于内核版本 2.6集应该是。取决于内核版本 2.6集应该是。是的,内核是可抢占的 自2.6分支以来,默认情况下它一直是抢先的。当然,它的抢占并不总是完美的,因为平衡抢占和进程响应的技术在很大程度上取决于内核负载配置文件(这对每个人都不一样)。是的,内核是抢占的 自2.6分支以来,默认情况下它一直是抢先的。当然,它的抢占并不总是完美的,

Linux 将stderr定向到stdout$命令名2>&;1不';默认情况下,是否将stderr打印到终端?

每当我在bash shell中遇到错误时,错误消息总是打印到终端上(例如语法错误) 那么,如果默认情况下stderr被打印到终端,那么将stderr重定向到stdout的目的是什么呢 $ command-name 2>&1 请注意,默认情况下,stdout会打印到终端。通过执行command name 2>&1实际上是将stderr重定向到同一位置 还有重定向顺序问题 因此,您要查找的是,stdout 2>&1的命令名>文件&1实际上是将stderr重定向到同一位置 还有重定向顺

Linux 如何检索系统中使用的端口?

以特定于Linux的方式,如何获取当前在某些接口中接受连接的所有打开的UDP端口和所有TCP端口的列表?最常用的方法是使用带有以下标志的netstat console实用程序: netstat -plan 其中: -p : Show the PID and name of the program to which each socket belongs; -l : Show only listening sockets; -a : Show both listening and non-lis

根用户的Linux组配额?

如果我在一个文件夹上设置了组配额,那么如果root用户在这个文件夹中写入一些内容,似乎会超过硬限制。顺便说一下,这个是root所有的 我已将root添加到与此配额关联的组中,没有任何更改 根用户是否受组配额的影响?基本上,具有CAP\u SYS\u资源功能的每个用户都不受检查,根用户通常具有该功能。然而,加入根组是另一回事。谢谢。“我的文件夹”由root用户拥有,并具有GRP1组。根已添加到GRP1。但根可以超过硬限制。

linuxbash-pidof命令不起作用

这是一个我无法理解的小错误。当我输入pidof命令关闭一个进程时,命令行只执行pidof并转到下一行,什么也没有发生。没有错误消息,什么都没有 例如: pidof supervisord 这是pidof在找不到任何同名进程时的预期行为 此外,它不会终止进程,只返回它的进程ID。您希望使用“killall”来实际终止一个进程,或者使用“pidof”的组合来获得PID,并使用“kill”来终止该PID killall supervisord 或 这是pidof在找不到任何同名进程时的预期行为 此

到期后如何在linux上重新安装TeamViewer试用版?

TeamViewer7试用版目前安装在我的Ubuntu linux系统上。它已经过期了。如何清除注册表。如何更改新安装的“个人使用”设置,我在网上遇到的一些URL中看到了这些设置。请指导。购买完整版本的TeamViewer的最佳方法。TeamViewer捆绑了自己版本的Wine,因此您所要做的就是删除您将其解压缩到的目录。它的所有设置都保存在“teamviewer7/.wine”中。供个人免费使用。

Linux 为什么没有为pci设备分配条形图地址?

以下是问题描述: linux启动后,运行命令“lspci-v”,我们可以看到可以找到pci设备,但没有为设备分配地址。通过进一步检查linux引导消息,可以在那里找到许多类似“bridge window mem…”的消息。不确定这些消息是否正常,或者实际上是地址分配失败的迹象 我运行的处理器是飞思卡尔p2010,它是powerpc体系结构。引导加载程序是我们自己设计的,没有涉及任何与pci相关的内容。因此,我们完全依靠Linux内核自己完成pci枚举 在Linux内核pci枚举开始之前,我们做的

Linux机箱2上的虚拟IP故障切换

我有两个Linux虚拟机盒 VM1IP为192.168.0.4 VM2IP为192.168.0.5 GW:192.168.0.1,网络掩码:255.255.255.0 1) 我在VM1上添加了一个虚拟ip ifconfig eth0:1 192.168.0.10网络掩码255.255.255.0以上 然后我可以从我的客户那里成功地ping它 2) 已删除VM1上的虚拟ip ifconfig eth0:1 192.168.0.10网络掩码255.255.255.0关闭 那么我无法从我的客户成功pi

Linux 多线程程序内核转储上的系统负载

如果一个内存占用量大的程序转储内核,则需要一段时间并以100%的cpu运行。如果我正在运行一个具有实时优先级的多线程程序,并且它转储了内核,那么它会在一段时间内耗尽具有实时优先级的盒子上的所有内核吗?如果是这样,是否有一种方法可以使内核转储只使用一个cpu,而不将进程本身固定在该cpu上?如何触发内核转储?这是否只是自动触发堆芯转储的segfault?还是你用某种特定的方式触发了它?(一种解决方法是捕获SIGILL、SIGBUS和SIGSEGV。在处理程序中,切换出实时优先级,删除信号处理程序,

Linux线程切换开销与进程切换开销

我理解在Linux下,线程被映射到进程上。我不清楚的是使用本机POSIX线程库(即内核>=2.6)的线程切换开销和进程切换开销之间的大小差异,我很难找到量化差异的信息充分的文章 这里有人有有用的参考资料来量化吗 谢谢 你有没有考虑过只做一个你自己的小基准和测量?有时候,像这样的事情严重依赖于实际的用例…@assylias-不是真的;我非常清楚线程操作和进程操作之间的区别,那篇文章没有给出任何粗略的度量。@thkala-这不是很容易衡量的:对于每种类型的切换,您将如何安排从上下文切换开始到上下文切

Linux BASH-复制时忽略隐藏文件并清空源目录

我是BASH新手,我一直在使用cron job的这个脚本。我在使用它时遇到了一些问题,最初使用的是mv,但结果是它无法与匹配的目录或任何东西合并。所以我被建议使用cp,因为这应该会合并和替换 /schedule/=源目录 /public_html/=目标目录 #!/bin/bash [ignore dot files/hidden files when copying] cp -a schedule/* public_html/ [empty contents of source direct

Linux Perf不支持某些性能事件

我想使用perf测量应用程序的暂停周期 当我尝试时:perf stat-B dd if=/dev/zero of=/dev/null count=1000000 1000000+0 records in 1000000+0 records out 512000000 bytes (512 MB) copied, 0.218456 s, 2.3 GB/s Performance counter stats for 'dd if=/dev/zero of=/dev/null count=10000

Linux 删除行中两个符号之间的字符串

我正在尝试从csv文件中删除行中两个符号之间的字符串。这是我的示例文件: 1.1.1.1,A-B:,awef.C.D.E 1.1.1.2,A-B:,few.C.D.E 1.1.1.3,A-B:,dfs.C.D 1.1.1.4,A-B:,few.C.D 1.1.1.5,A-B:,fdsferger.C.D.E 1.1.1.6,A-B:,wef.C.D 1.1.1.7,A-B:,jty.C.D.E 输出如下所示: 1.1.1.1,A-B:,C.D.E 1.1.1.2,A-B:,C.D.E 1.1.

Linux 退出emacs时,屏幕上的终端被屏蔽

我在屏幕中以终端模式使用emacs(即使用-nw选项启动)。当我退出或挂起emacs时,我看到的是一个只有当前提示符(*)的空白终端,而不是返回上一个命令的历史记录和这些命令的输出 这与关闭altscreen选项时发生的情况不同,因为来自emacs的所有内容都会从终端上消失 我觉得奇怪的事情: -当我在屏幕外运行emacs时,不会发生这种情况 -其他全屏应用程序(如vim或更低版本)不会出现这种情况 -这不会发生在具有相同.screenrc、.bashrc等的其他计算机上 出现问题的计算机运行s

Linux 什么是WQ

我是Archlinux的用户,我想知道每个进程都做些什么。我发现了一个连谷歌都不能告诉我的东西。那么延迟WQ过程是为了什么?谢谢 编程问题也是如此,所以这是离题的。也许最好是

Linux 使用shell脚本从父脚本捕获通过ssh调用的子脚本的退出代码

我有一个名为deployment.sh的子脚本和名为deloy_base.sh的父脚本。从父deploy_base.sh,iam通过其他服务器上的ssh调用子脚本。实际上,子脚本正在执行部署过程。如果子脚本中的任何命令失败,则应将错误状态发送到父脚本,以便我可以根据子脚本中的成功或失败错误代码发送电子邮件 现在,不管子脚本中的任何命令失败,它总是会进入成功块。请帮忙 ssh user@10.0.0.1 "/home/scripts/deployment.sh" DEV 2>&1

Linux Shell错误:Jenkins未读取子命令

出于某种原因,jenkins在运行这段代码时遇到问题: svn merge --reintegrate ../branches/${BRANCH_TO_MERGE} --username "${LDAP_USER_ID}" --password "${LDAP_USER_PASSWD}" >$logfile 2>&1 然而,当写在下面…它的作品 cd${WORKSPACE}/WORKSPACE/trunk svn merge ../branches/${BRANCH_TO_

Linux进程执行历史记录

我在Linux 3.4.0中有一个带有RT7(实时)补丁的多线程(三线程)应用程序。该应用程序需要实时执行,容差约为20毫秒。该应用程序实时运行一段时间(1分钟到50分钟),然后我发现,当其中一个线程正在执行某些处理时,会发生上下文切换,大约80到500毫秒后会返回到该线程。我需要找出是什么过程拿走了时间片。我的所有线程总共消耗约5%的CPU时间。是否有任何工具可以查看带有时间戳的流程执行历史记录 谢谢, 哈基姆考虑使用。它是受DTrace启发的动态仪表引擎。它动态地修补内核(因此需要调试信息)

Linux 如何为RHEL安装Puppet安装可选通道?

我正在尝试在RedHat Linux版本7上安装Puppet 说明书上说你需要安装一个“可选通道” 有人能提供如何做到这一点的指导吗?我想安装木偶。我尝试在没有可选通道的情况下安装Puppet Master。最主要的错误是我不能启动木偶大师 当我尝试跑步时: /etc/init.d/puppetmaster restart 但我明白了: -bash: /etc/init.d/puppetmaster: No such file or directory 通过阅读文档: subscriptio

Linux printf脚本中的格式问题

我有一个文件stv.txt包含一些名称 例如stv.txt如下所示: hello world 我想通过使用这些名称并向其中添加一些额外的文本来生成另一个文件 for i in `cat stvv.txt`; do printf 'if(!strcmp("$i",optarg))' > my_file; done 输出 期望输出 如何获得正确的结果?这是一个有效的解决方案 1单引号内的所有符号都被视为字符串2使用printf时,不要用引号括住变量。(在本例中) 下面的代码应

在linux中的函数erase()中安装NS 2时出错

以下是我在ubuntu 14.04中安装2.35版NS2时遇到的错误。 错误的解决方案是什么 我是否需要重新安装整个安装程序或特定模块,因为此错误会在一段时间后发生 我试了两次,两次都犯了同样的错误 两个简单的解决方案: 1) 使用ns-allinone-2.35的“2014年11月更新”:ns-allinone-2.35_gcc482.tar.gz 它可以使用所有的gcc/g++版本,4.6。。。4.9.2 链接 2) 使用2011版本:sudo apt get install g++-4.4

Linux 无法在Windows下运行Laravel Homestead(grep错误)

我应该提前指出,我基本上不懂Linux——我是一个Windows用户,我想尝试一下Hack语言,这似乎是启动和运行的最快方式 我紧随其后,甚至尝试启动配置的映像 当我运行homestead up或homestead provision时,它会失败,并显示相同的错误消息: Rasmus Schultz@SIDEWINDER-7240 ~ $ homestead provision ==> default: Running provisioner: file... ==> default: Runn

旧的Linux gui框架?

一些旧的Linux程序似乎使用了不同于GTK或QT的gui框架,这是什么 与旧的Netscape for Linux类似: (来源:) 或项目经理(目标c ide) (来源:) 有可能将其主题化吗?项目经理似乎正在使用一些OpenStep实现,可能是GNUStep。从Netscape 4+(包括Firefox)到IIRC,所有东西都使用自己的基于XML和Javascript的框架,称为XUL。我想这个问题更适合or。尽管如此,这个主题看起来很红。从未听说过GNUstep,谢谢!我想这就是我要

Linux 如何安全地抑制命令输出?

通常在unix系统上,可以通过将STDIN和/或STDERR重定向到文件或/dev/null来抑制命令输出。但是,如果需要在bash脚本中通过STDIN将内容传递给管道命令,该怎么办 下面的例子应该说明这是什么意思。这只是一个例子,虽然-我不是在寻找一个解决方案,这个命令的具体,但这种情况下一般。遗憾的是,在许多情况下,您可能希望抑制脚本中的输出,但需要通过STDIN传递内容,而命令没有以其他方式提交信息的开关 我的“问题”是,我编写了一个函数来执行具有正确错误处理的命令,并希望将执行命令生成的

Linux 如何访问外部虚拟主机

我的Apache2文件example.com.conf中有这个。我只能通过IP访问它,但当我尝试以服务器名称访问它时,总是出现以下错误: 网络错误dns\u服务器\u故障 我正在运行Ubuntu 14.04.03 X64 我尝试在使用Windows 8.1的计算机上访问此项。您是否在主机文件中添加了具有域名的条目?您是指在/etc/host中吗?是的,我有,我想是的,我的文件主机看起来像lile:Ip地址,或者如果你认为有什么不同,请给我一个例子是的,在主机文件中添加Ip和你的域,在使用ping

Linux FFMPEG rtsp流向输出文件添加时间戳

我试图将时间戳添加到FFMPEG的输出文件中,但出现了此错误。 Filtergraph 'drawtext=fontfile=/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans-Bold.ttf:text='\%T': fontcolor=white@0.8: x=7: y=460' was defined for video output stream 0:0 but codec copy was selected. Filtering and st

Linux Shell脚本到邮件脚本输出的表格格式

我不熟悉shell脚本。我需要你的帮助在下面的场景 脚本:wc file1 file2 file3 file4 results : 1488 2977 2248 file1 123 345 657 file2 123 896 456 file3 567 987 124 file4 现在我需要以下面的格式发送这个结果,标题名如下 在这里,第二列始终是默认值 Filename Destname rowcount bytesize file1 default 1488 2248

Linux 用户将如何设置可从子shell访问的环境变量?

我试图找出它的答案,但没有找到一个完美的答案。 这个问题可能很傻,但我真的需要知道它的答案。您没有指定哪个shell,所以我假设为“bash”: 答案是d)导出命令 示例脚本test1.sh Set -x command set command By direct assignment export command 还有另一个脚本test2.sh #!/bin/bash export A=xxx B=yyy ./test2.sh 然后: 将打印: $> ./test1.sh 还有

Linux 错误:会话ID列表必须在-s之后

celeryd停止工作且未启动。 我尝试了以下代码: sudo nohup python manage.py celeryd & ps -els | grep celeryd 和获取错误: 错误:会话ID列表必须在-s之后 您宝贵的回复对我帮助很大。从您的命令中删除选项s。你应使用: ps -el | grep celeryd 如果您阅读ps手册man ps -s sesslist Select by session ID. This selects the p

Linux bash脚本(意外标记附近的语法错误';elif';

在开始时,脚本会询问您是否要启动它。但当您键入内容并按enter键时,会出现以下错误: Klammern和Doppelte的名字是Gleich Zeichen gibt nur beim Vertifizieren von Daten和bei Java。 贝斯皮尔: echo "Wollen Sie mit einer Benutzererstellung beginnen? Ja(y), Nein(n)" read text if [ $text == "y" ];

Linux 如何在gdb中运行二进制文件时对其进行修改

Edit:实际问题在于二进制文件的更新方法,而不是由于gdb的问题。有关详细信息,请参见下面的答案。 原始问题: 最近,当gdb运行程序并在断点处停止时,我无法再编译程序。再次尝试写入二进制文件将导致“文本文件忙”错误 这是在Ubuntu 16.04 LTS 64位内核4.4.0-75上实现的 我不认为我在寻找正确的东西,因为一些搜索“gdb文本文件繁忙”或类似的搜索并没有产生任何结果。gdb手册特别提到了这种行为(在运行gdb时再次编译)是受支持的,事实上我以前已经做过很多次了 如果您能提供任

Linux cdev_添加和设备_创建功能之间的区别?

我是linux设备驱动程序开发的新手。我不明白cdev_add实际上做了什么。我查看了一些简单的char设备驱动程序代码,看到cdev_add和device_create函数一起使用。 例如: /* Create device class, visible in /sys/class */ dummy_class = class_create(THIS_MODULE, "dummy_char_class"); if (IS_ERR(dummy_class)) { pr_err("Erro

Linux git分支,但更改反映在master中

我已经创建了一个分支作为git branch my_branch,然后git checkout my_branch,在其中工作,但是当我切换回mastergit checkout master时,我也会在master中看到这些更改。我想这不应该发生 % git checkout my_branch Switched to branch 'my_branch' <I make my changes> % git status On branch my_branch Changes

如何查询Linux机器&x27;Clojure有什么消息?

好的,这里是完整的需求:编写一个简单的Clojure编程,可以在Linux机器上运行,打开一些RESTful API端点,查询Linux机器的系统信息(例如内存、磁盘等) 我搜索了一些东西,但仍然没有明确的想法如何或从哪里开始,不管RESTful API如何,我正在尝试编写Clojure编程,它可以收集Linux机器的信息,也许它可以通过在Clojure中调用Java来实现这个功能?但我对Java也不太了解。 无论如何,我正在尝试找到一种方法。我使用java-XshowSettings:all获

用于在Linux上运行.net核心控制台应用程序的Dockerfile(它不是自包含的)

我有一个.NETCore2.1控制台应用程序,我想将它构建到一个docker容器中,该容器将部署到Linux(Alpine)上 如果它在windows上有一个exe输出(当然是自包含的)。我的docker文件可能如下所示: COPY /output/ /bin/ CMD ["/bin/sample.exe"] FROM microsoft/dotnet:2.1-runtime COPY /output/ /bin/ CMD ["dotnet", "/bin/sample.dll"] 由

Linux 发行版维护人员(如Ubuntu、Fedora)使用哪些工具进行构建/依赖关系管理? 出身背景

严格地说,为了研究和概念验证,我想分叉一个现有的Linux发行版,比如Ubuntu(或者Fedora)。我有一个小型的vagrant虚拟机集群,我想尝试一下这个集群,以了解大型(开源)项目如何处理构建和依赖关系管理 细节 虽然可以直接提取它们各自的源树、补丁等。;有一件事让我难以理解,那就是“他们如何构建每一个包”?为了实现“夜间构建”,据我所知,发行版维护人员需要: 为所有受支持的平台(即x86,x86\u 64,arm,armhf,aarch64,mips等)使用工具链/编译器设置生成环

Linux GNUBASH命令更改图像大小和DPI?

如何使用LinuxBASH(我目前正在使用GNU BASH,版本4.4.12(1)-发行版(x86_64-pc-Linux-GNU)),将72 DPI下2550x3300像素的JPG图像转换为200 DPI下1700x2200像素 我认为像ImageMagick这样的东西可能会起作用,但我不确定如何调用它来完成上述场景。我已经查看了文档中的convert命令(包括man和联机),但我仍然不清楚这件事。像这样使用ImageMagick: convert start.jpg -set density

Linux 如何防止其他用户停止/删除我的docker容器

在简化版本中: 我们的共享服务器系统上有两个用户: 用户1我 用户2 Docker安装在整个用户系统中 I用户_1使用运行我的进程的标准docker run创建了一个docker容器。但是用户_2可以访问此容器,因此他/她不仅可以查看,还可以停止并删除我的容器 如何阻止用户_2或其他用户访问此容器。 注意:没有用户可以通过sudo进行root访问。。谢谢 注意:没有用户可以通过sudo进行root访问 如果用户有权访问docker套接字,则他们都有主机上的root访问权限。在那一点上你已经失去了

如何捕获CTRL+;Linux POSIX shell脚本中的Z;有没有可能?

我是一名Linux shell脚本编写人员,我想知道是否有可能捕获脚本睡眠信号: 那就是Ctrl+z 我现在就是这样做的,我也想捕捉睡眠信号 定义处理信号的函数 #使用适当的消息将它们视为错误 sighup(){print_error_and_exit“trap()”捕获了sighup(1)。正在终止。再见!} sigint(){print_error_and_exit“trap()”捕获了sigint(2)。正在终止。再见!} sigquit(){print_error_and_exit“tr

Linux docker卷的装入点名称

使用以下命令: docker容器运行-dit--name testcontainer–mount source=ubervol,target=/vol:latest 源装载点名称是ubervol指向位于容器内的目标/vol,如下所示: user@machine:~$ docker container exec -it b4fd sh / # pwd / / # ls vol vol ubervol位于主机(托管docker守护程序)路径的容器外部 使用以下Dockerfile: # Cr

Linux 如何根据文件数量将文件夹内容复制到多个文件夹?

我想根据文件数(此处:50)将文件从一个文件夹(名为:1)复制到多个文件夹 下面给出的代码有效。我根据文件数将文件夹中的所有文件传输到子文件夹,然后将目录中的所有文件复制回初始文件夹。 但是,我需要更干净、更高效的东西。为下面的混乱道歉,我是个裸体 bf=1 #breakfolder cd 1 #the folder from where I wanna copy stuff, contains 179 files flies_exist=$(ls -1q * | wc -l) #assign

Linux Kubernetes的AWS图像

我试图练习库伯内特的这本书,但遇到了以下障碍: 我有Windows 10 Home,无法安装Docker Desktop 所以我想使用AWSEC2 Windows Server RDP给我带来了麻烦,我不知道如何从CLI安装软件包。我还对网络浏览器的权限感到头疼 所以我选择了AmazonLinux2AMI。Docker、Kubernetes、Git都安装正确 但我需要为课程中的某些练习安装GUI和web浏览器,这让我陷入了困境 我是否错过了一些简单的解决方案?除了购买新版本的Windows之外?

使用SSH密钥创建Amazon Linux 2用户

我正在尝试使用adduser命令创建一些AmazonLinux2用户,但无法为这些用户创建用于登录的ssh文件 如果有人能帮我完成这些步骤,那将非常有帮助这是标准的Linux。它实际上与您使用的是AmazonEC2实例这一事实无关 在一个典型的组织中,用户应该生成自己的密钥对,然后向系统管理员提供公共密钥,以便他们可以将其放入~/.ssh/authorized_keys文件中。这样,即使系统管理员也没有密钥对的私有部分 见: 或者,用户可以在AmazonEC2控制台中生成密钥对。AWS将保留公钥

Linux 在另一个文本文件的文件中运行命令

我有一个filter命令保存在一个文件中(比如filter.txt)。该命令可以类似于以下命令 grep "PASS" 然后我还有一个testcase的输出文件(比如output.log)。我想将filter命令保存在output.log上的filter.txt文件中 我在找类似的东西 cat output.log | `cat filter.txt` 但它似乎不起作用。有没有合适的方法可以做到这一点?这个方法有效: cat output.log | bash filte

Linux 如何向vi发出特殊命令(插入)?

我记得我用输入命令“编程”了vi的魔力,但我不记得具体是怎么做到的 我的特别要求是: 使用要执行的命令在脚本中启动vi 在一个文件中插入 在文件中搜索字符串 使用vi命令行中的$VARIABLE替换命令中的某些内容 以:wq结束 在我的记忆中,我发送了与vi中完全相同的命令,ESC键被“[”或附近的东西模拟 我在脚本中使用这个命令来编辑和更改文件 我将看到-c选项,但是现在我不能使用$VARIABLE,插入是不可能的(使用'I'或'o') 这个示例没有起作用(在-c命令中,$VARIABLE