如何将输出打印成表格?
如何printf像桌子一样对齐我的输出? Title Author BaokyBook Baoky2 Use basename commandUse basename command .. Baoky 我的部分代码就像这样 titlelength=${#title}; 首先,我获得了标题长度,然后我像这个 一样printf titlespace=`expr 60 - titlelength`; printf "%s %${titlespace}s\n" "$title" "$author" 但是对齐不正确,我如何使其正常工作 回答以下答案: 进行更改 我所有的左侧对齐.而且它似乎行不通. 解决方案 最简单的事情是在固定宽度上打印标题:
20 2024-04-22
编程技术问答社区
无法使用 PHP 运行 shell 脚本文件
嗨,我无法使用我的php代码运行.sh文件. Files: index.php and .sh files are in the same directory. 我尝试的是: echo shell_exec('sh shell_file.sh'); //Did not execute echo shell_exec('shell_file.sh'); //Did not execute echo exec('shell_file.sh'); //Did not execute 但是,当我手动运行shell_file.sh文件时,它确实执行. 解决方案 尝试这样: 您需要做的就是用程序调用文件.如评论中建议的那样,用bash或sh调用它: echo shell_exec('sh /shell_file.sh'); 另一个选项可能是: $contents = file_get_contents('/shell_file.sh');
24 2024-04-22
编程技术问答社区
如何在 shell 中单行进行斜线替换?
如果我在外壳终端运行此命令 A="feature/test-slash" echo ${A//\//-} 它返回feature-test-slash 但是如果我运行 echo ${feature/test-slash//\//-} 它返回一个空字符串. 我该怎么做? 相关问题 解决方案 echo "feature/test-slash" | tr '/' '-' 您的解决方案不起作用,因为$ {}旨在与变量一起使用. 其他解决方案 如何在一行中砍掉外壳替换? 与;. 连接行 A="feature/test-slash"; echo ${A//\//-}
38 2024-04-22
编程技术问答社区
如何在 sudo su 后执行命令
我需要在sudo su. 这是我的脚本.SH sudo su monit restart haproxy. 在这里,如果我要执行脚本. 有什么想法吗? 解决方案 sudo命令期望您输入密码,这就是为什么它会悬挂的原因,您可以使用管道,以便将密码传递给这样的命令: echo | sudo su monit restart haproxy. 其他解决方案 此处有关Sudo Su的一些信息.您需要输入sudo或su命令的密码,以下是我发布的链接中的一些报价,这可能是您问题的来源: sudo -sudo旨在运行具有根特权的单个命令.但是与su不同,它会提示您获取当前用户的密码.该用户必须在sudoers文件中(或在sudoers文件中的组)中. 默认情况下,Ubuntu"记住"您的密码15分钟,因此您不必每次输入密码.
62 2024-04-22
编程技术问答社区
执行压缩包中的 shell 脚本
我在Linux系统中有一个巨大的文件夹.在其中,我有一个封闭了几个shell脚本的邮政编码.我需要执行这些Shell脚本,但是挑战是我没有对该文件夹的写入访问权限.另外,我也不能将其移至其他目录,因为该文件的位置对其执行至关重要.它在任何其他目录中都无法使用. 有什么方法可以从邮政编码内部执行shell脚本而不提取它? 解决方案 您可以通过指定zip文件后的路径来解压缩一个特定文件: $ unzip c.zip a.sh Archive: c.zip extracting: a.sh 在此命令中a.sh是要运行的脚本的路径. 您可以用-p参数: 将内容打印到stdout. $ unzip -p c.zip a.sh #!/bin/sh echo "this is a.sh; it is now $(date)" 最后,您可以将其输送到sh进行运行: $ unzip -p c.zip a.sh | sh this is a.sh; it
24 2024-04-22
编程技术问答社区
替换类文件的 Shell 脚本
我阅读了许多有关更改文件内容并替换整个文件的文章,但我几乎不理解. 推荐 this 也是如此. .sh 是使我感到困惑的人.在我的情况下,我也需要使用 .sh .我不想通过尝试新事物而没有太多理解来破坏该项目. 如何在JAR中替换类文件?我从工作区准备了类文件.我需要做的就是替换JAR中已经存在的类文件.此外,需要在更换后重新启动服务器,以查看效果吗? 我们正在使用的应用程序服务器是IBM WebSphere. 我还应该导航到服务器中的EAR文件位置吗?例如,CD AAA/BBB/CCC,然后执行命令. 请帮忙,我完全是新手. 解决方案 从耳朵中提取/拉出特定类: jar -xf sample.ear com/sample/Example.class 然后在生成的类中覆盖com/sample/Example.class,最后做: jar -uf sample.ear com/sample/Example.class 再次使用更新的类文件更新EAR文
16 2024-04-22
编程技术问答社区
有办法在 shell 脚本中接受不带分隔符的特殊字符吗?
我的任务是制作一个交换2个字符串然后输出文件的shell脚本.命令类似于: sed s/ search_for /替换/g output.txt> temp.dat mv temp.dat output.txt 脚本是这样的: ./myScript var_A var_B output.file 我必须工作正常.第二部分做同样的事情,但是我必须将以下特殊字符视为常规字符串: [ ] ^ * + . $ \ - 我对如何解决这个问题有一个一般的想法(这可能是错误的方法).我想接受这些字符,并将它们设置为变量,并在正面附加\. var_A=\\$1 var_B=\\$2 我的问题是 *(星号)和\(BackSlash)字符.我正在使用一个简单的测试脚本来查看我可以轻松转换为变量的哪些参数: for i in "$@" do echo "$i" done 但是 * char在目录中显示所有文件,\显示下一个参数.我知道 set
18 2024-04-22
编程技术问答社区
编写脚本命令,计算公司 1 的总成本
给定文件的内容如下: Company1 400 Company2 500 Company3 600 Company2 150 Company1 350 写一个脚本命令以查找公司1所产生的总成本. 解决方案 awk非常适合: awk '$1 == "Company1"{sum += $2} END {print sum}' money.txt awk一次处理输入文件一行,将字段分开.在此脚本中,将第一列与字符串Company1完全匹配的所有行的第二列添加到变量sum中.最后,打印了总和. 通过执行以下操作很容易参数化: #!/bin/sh company=${1-Company1} awk 'tolower($1) == tolower(c) {sum += $2} END {print sum}' c="$company" money.txt 其他解决方案 #!/bin/bash sum=0 check="Com
20 2024-04-22
编程技术问答社区
如何将一条命令的多行输出作为 n 个参数传递给一条命令,而不是将 n 条命令作为一个参数?
tl; dr 给定输入 a b c 我试图将每个输入作为单独的参数执行命令foo(例如,'n'输入意味着单个使用'n''gruments对foo的调用)... foo a b c 我不是试图执行foo每个参数一次(例如,'n'输入意思是'n'呼叫foo每个参数>每个参数迭代) # Not this! foo a foo b foo c 可以在字符串串联以eval>? 之外完成. 摘要 我正在尝试找到推荐的方法,将一个命令的多行输出作为单个参数传递给第二个命令.需要明确的是,我不是要执行第二个命令,一次是每个参数.我正在尝试将所有参数传递给一个命令实例. 这比解释要容易. 考虑使用三个Swift源文件的硬编码列表(请注意,有些有空格并且在子文件夹中)... xcrun -sdk macosx swiftc -o "$OUTPUT_FILE" "main.swift" "car.swift" "Models/Road Bik
16 2024-04-22
编程技术问答社区
查找匹配的"'时意外出现 EOF;语法错误:文件意外结束
我有在Shell脚本下运行的问题 git diff -U0 HEAD^ HEAD pkg.json | grep "^\\+\\s" | grep -o \'"v.*"\' | sed \'s/"//g\' | \ xargs -I{} sh -c \'docker pull alpine:{} \' 错误是 ./shell/shell.sh: line 2: unexpected EOF while looking for matching `"' 解决方案 问题是您的sed命令: sed \'s/"//g\' 当您拥有\'时,这是一个逃脱的单引号.然后,您后来有一个",其余的脚本不再有"字符.因此 我认为您的意思不是逃脱单语言: sed 's/"//g' 其他解决方案 问题是您的sed命令被弄乱了. sed 's/"//g'将工作. 尝试以下操作: git diff -U0 HEAD^ HEAD pkg.json | grep
30 2024-04-22
编程技术问答社区
使用变量在 applescript/osascript 中运行 2 条命令
我试图运行2个存储在osascript 的变量中的命令 这是我的start.sh currentDirectory="cd $(pwd) && npm run start" echo $currentDirectory osascript -e 'tell application "Terminal" to do script '"${currentDirectory}"'' 我将其作为输出 sh start.sh cd /Users/Picadillo/Movies/my-test-tepo && npm run start 83:84: syntax error: Expected expression but found “&”. (-2741) 解决方案 @barmar:要执行脚本的参数需要在双引号中. 是;但是,您完成的方式仍然不安全. 如果路径本身包含后斜切或双引号,则会将语法错误丢弃,因为随着代码字符串未能编译而被弹出. (甚至可能
14 2024-04-22
编程技术问答社区
Bourne Shell:如何连接需要评估的变量?
我很难找出一种方法将几个变量正确连接在一起.这个想法是随着时间的推移收集几个项目(在这种情况下," foo"," bar"和" baz"),然后将它们串联成一个字符串(ex:x =" foo bar baz"). 以下是我到目前为止所制定的代码: #!/bin/sh N=0 # assign foo eval "DATA${N}='foo'" eval "echo First value is: \$DATA$N" # First value is: foo N=`expr $N + 1` # assign bar eval "DATA${N}='bar'" eval "echo Next value is: \$DATA$N" # Next value is: bar N=`expr $N + 1` # assign baz eval "DATA${N}='baz'" eval "echo Last value is: \$DATA$N" # Last
12 2024-04-22
编程技术问答社区
在 docker 运行时使用 args 执行命令并覆盖入口点
我试图使用接受参数的脚本执行docker图像中的入口点,并且失败如下 ▶ docker run --entrypoint "/bin/sh -c 'my-script.sh arg1 arg2'" my-image:latest docker: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "/bin/sh -c 'myscript.sh arg1 arg2'": stat /bin/sh -c 'my-script.sh arg1 arg2': no such file or directory: unknown. 但是,当我执行到容器时,上述命令成功: ▶ docker run --entrypoint sh -it my-image:latest ~ $ /bin/sh -
30 2024-04-22
编程技术问答社区
为什么这个单引号字符串在命令替换中会被解释?
比较这两行shell脚本: printf '%s' 's/./\\&/g' #1, s/./\\&/g printf '%s' `printf '%s' 's/./\\&/g'` #2, s/./\&/g 我的问题是:为什么单引号的双重冲刺被解释为第二行脚本的单个后斜线? 解决方案 从 开始 printf '%s' `printf '%s' 's/./\\&/g'` backticks内部的表达式返回s/./\\&/g,如第一个表达式中所示,没有单引号,因此您可以得到 printf '%s' s/./\\&/g 第一个后斜线逃脱了第二个,因此它打印s/./\&/g.
18 2024-04-22
编程技术问答社区
向屏幕发送命令:"内容 "的限制,换行的怪异之处
尝试通过" Qualt"选项将长命令字符串传递到屏幕上.当字符串短时,在许多脚本中都成功地完成了此操作,并且它存在于bash中,就像这样: screen -d -m -S worker screen -S worker -X -p 0 stuff $'/usr/bin/env python3 /root/worker.py\n' 在这种情况下,我正在从文件中读取命令.我可以将'\ n'添加到该文件,但是$()构造函数会吃掉新线.我尝试了printf,isf =和许多排列,但是在我可以保留新线的地方,该命令不会将其用于屏幕. GEO_COMMAND=/foo/geo_command.txt screen -S worker -X -p 0 stuff printf '%\n' "$GEO_COMMAND" or screen -S worker -X -p 0 stuff $GEO_COMMAND geo_command:''foo -bar -geo1 -geo2 -
10 2024-04-22
编程技术问答社区
在 POSIX shell 中循环浏览文件时,避免匹配.和.。
我想对目录中的每个文件做点事,所以我有 for f in /path/* /path/.*; do [ -e "$f" ] || continue do_thing "$f" done 不幸的是,这也与.和..匹配,在这种情况下,这是不可取的.如何避免匹配.和..? 解决方案 要在当前目录中的每个文件上运行do_thing,请尝试: find /path -maxdepth 1 -type f -exec do_thing {} \; 此方法避免循环并避免解析ls. 它如何工作 find /path 这启动了find命令,并告诉查找以目录/path. -maxdepth 1 这告诉find仅在当前目录中查看,而不要降为子目录. -type f 这告诉find我们只是在寻找常规文件(不是目录). -exec do_thing {} \; 此运行命令do_thing在发现的每个文件上. 其他解决方
26 2024-04-22
编程技术问答社区
如何将 JSON 值传递给 Docker shell 脚本中的命令?
我有一个dockerfile,可以用ubuntu 16.04创建图像.在Docker文件中: # dotnet tool command RUN apt-get install dotnet-sdk-2.2 -y # for dot net tool ENV PATH="${PATH}:/root/.dotnet/tools" # jq command to read json file RUN apt-get install jq -y ADD xxx /xxx # Copy the deploy-tool.json file ADD deploy-tool.json /xxx/deploy-tool.json # Copy the main sh script to xxx ADD main-migrate.sh /xxx/main-migrate.sh # Run the main sh script to run script in each xxx/*/bla..bla.
16 2024-04-22
编程技术问答社区
在声明式管道内的 shell 脚本中传递 Jenkins 参数值时出现错误替换
这是我的代码,我在jenkins声明管道中传递参数值,但是当我执行此错误 时 t@tmp/durable-64ccbb6b/script.sh:第4行:$ {params.inputvalue}:不良替代 sh ''' #!/bin/bash -xe printf '%s\n' /dev/sd{e..z} | head -n "${params.InputValue}" > volumelist.txt cat volumelist.txt ''' 我尝试了几乎所有的Google搜索不良替代.仍然无法摆脱它.有人可以帮我解决这个问题吗? 解决方案 请看一下Groovy的 tl; dr使用"""而不是''': sh """ printf ${params.InputValue}
24 2024-04-22
编程技术问答社区
如何确定哪个 shell 运行脚本?
我的Linux中有几个外壳,例如bash,sh,zsh ... ,我知道至少有3种方法可以指定外壳执行我的外壳脚本: 在Shebang中指定,例如#!/usr/bash 执行时在命令行中指定,例如sh MyScripts.sh 在$SHELL中指定(例如,SHELL=zsh),然后像./MyScripts.sh 一样执行脚本 所以,我的最大问题是,这三种方式之间发生冲突,哪个规则具有最高优先级?哪个最低? ,如果我做sh MyScripts.zsh怎么办?您知道,后缀和二进制不匹配. 解决方案 文件名只是文件名.除了零字节和/外,它们可以是任何东西.后缀仅适用于人类.他们可以是什么.它们在Linux上无关紧要. 当您键入cmd ./filename时, shell 用参数./filename执行命令cmd.是否cmd是cmd是python,zsh,bash或wc,它将被第一个参数设置为./filename而被执行.现在,该程序使用来处理字符串
14 2024-04-22
编程技术问答社区
读取 tee 命令的基础文件
参考 将在此处讨论的内容的完整代码: https://github.com/djon2003/com.com.cycom.cycom.cyberinternauts.linauts.linux.backupuppupty/a > activateLogs解决了解决的问题如何登录文件和屏幕: https://stackoverflow. com/a/70792273/214898 限制 只是最后一个问题的小提醒:此脚本是在有限的环境上,在QNAP(NAS)上执行的. 背景 我具有激活记录的函数,该功能现在具有三种模式:屏幕,磁盘等.在一些帮助下(从上面的链接问题来看),我实现了使工作的两种选择.磁盘和两个都使用的文件描述符编号3.第一个指向文件,第二个指向stdout. 在我的脚本出口(使用陷阱)上,它检测到是否有记录错误并通过电子邮件发送. 代码 function sendErrorMailOnExit() { ## If e
40 2024-04-22
编程技术问答社区