我正在尝试运行一个.sh文件,该文件将导入excel文件到我的数据库.两个文件都在公共文件夹中的同一目录中.由于某种原因,Exec命令未执行或没有发生任何错误. .sh文件冷: IFS=, while read column1 do echo "SQL COMMAND GOES HERE" done
以下是关于 sh 的编程技术问答
有没有一种方法可以在退出时自动重新启动PHP脚本,无论它是否已正确退出,还是由于错误或最大内存使用情况而终止.? . 解决方案 PHP脚本也可以使用PCNTL重新启动. 免责声明:这项练习的重点只是证明PHP完全有能力重新启动自身并回答以下问题: 有没有一种方法可以在退出时自动重新启动PHP脚本,无论它是否已正确退出或由于错误而终止? 因此,除了我们的范围之外,要详细介绍UNIX流程的任何详细信息,因此我建议您从 pcntl book 或参考 php-pcntl 以获取更多详细信息.仅仅因为我们可以做到的并不意味着它是明智的,就需要开发人员酌处权.除了所有的严重性,让我们玩得开心. 在示例中,我们将假设它是使用命令的半定位壳的终端中启动的PHP CLI脚本: $ php i-can-restart-myself.php 0 我们将重新启动计数属性作为指示,表明该过程已重新启动. 我可以自动重新启动PHP脚本吗? 是的,我可以!
我正在尝试将Perl用作特定地址的Web服务器:端口号,10.x.x.x:Portnumber,同时还将其显示我的index.html文件中的内容.但是,当我在浏览器中运行10.x.x.x:portnumber时,perl不会显示index.html的内容.我如何才能从文件中阅读perl? 这是我解决此问题的代码. #!/usr/bin/perl { package MyWebServer; use HTTP::Server::Simple::CGI; use base qw(HTTP::Server::Simple::CGI); my %dispatch = ( '/' => \&resp_hello, ); sub handle_request { my $self = shift; my $cgi = shift; my $path = $cgi->path_info(); my $handler = $dispatch{$
我希望能够将一个字符串的出现替换为文件内容中的另一个字符串的出现和目录中所有文件的文件名减去" .git"目录.我有以下代码,这非常适合更改文件名,但不会替换文件中的字符串.我在做什么错? #!/bin/bash # Replace occurances in files, lowercase lower1=$(echo $1 | tr '[:upper:]' '[:lower:]') lower2=$(echo $2 | tr '[:upper:]' '[:lower:]') echo "Replacing $lower1 with $lower2..." find . -type f \! -iregex '.\|./.git' -exec perl -i -pe 's/$lower1/$lower2/g' {} \; # Replace all other occurances in files to capitalised upper2=$(echo ${2:0:1}
这是我数据的示例: SomePascalCase.wav ThingsThat1.wav Are.wav Here.wav 这是我正在寻找的结果: some-pascal-case.wav things-that-1.wav are.wav here.wav 这是我使用的: for f in *.wav; do mv "$f" $( echo "$f" | perl -pe 's/([A-Z])([a-z]+)(?=[0-9A-Z])/\L\1\2-/g' | perl -pe 's/([A-Z])([a-z]+)(?=.wav)/\L\1\2/g' ) done 是否可以合并我将两个正则表达式合并为单个表达式? 解决方案 您在这里不会真正使用正则替代.您将使用破折号使用split,然后使用join. split模式是背后的负面外观,然后是向前看. lc join "-", split /(?
当孩子的过程从终端接收SIGINT时,我会从system()中遇到一些奇怪的回报值.为了解释,从perl脚本parent.pl我使用system()将另一个perl脚本作为子过程运行,但是我也需要通过shell来运行孩子,所以我使用了system 'sh', '-c', ... form.孩子的过程成为sh过程,sh过程的父母变成了parent.pl.另外,为避免让接收SIGINT信号的sh过程,我将其捕获. 例如,parent.pl: use feature qw(say); use strict; use warnings; for (1..3) { my $res = system 'sh', '-c', "trap '' INT; child$_.pl"; say "Parent received return value: " . ($res >> 8); } 其中child1.pl: local $SIG{INT} = "DEFAULT
我觉得必须有一种更好的方法来计数发生,而不是在perl中写下子,shell in linux. #/usr/bin/perl -w use strict; return 1 unless $0 eq __FILE__; main() if $0 eq __FILE__; sub main{ my $str = "ru8xysyyyyyyysss6s5s"; my $char = "y"; my $count = count_occurrence($str, $char); print "count of in \n"; } sub count_occurrence{ my ($str, $char) = @_; my $len = length($str); $str =~ s/$char//g; my $len_new = length($str); my $cou
我正在尝试运行sh脚本,并在Mac上获取以下错误: /usr/bin/perl^M: bad interpreter: No such file or directory 我该如何修复? 解决方案 删除^M用 的控制字符 perl -i -pe 'y|\r||d' script.pl 其他解决方案 /usr/bin/perl^m: usr/bin/perl末尾的^M从脚本开头的#!行中删除.那是一个虚假的ascii 13角色,使壳发疯. 如果您看不到字符,可能需要使用二进制编辑器检查文件. 您可以喜欢这样做将文件转换为MAC线结束格式: $ vi your_script.sh 一旦进入VI类型: :set ff=unix :x 其他解决方案 问题是您正在尝试在Linux/unix/osx机器上使用DOS/Windows文本格式. 在DOS/Windows文本文件中,线路断开,也称为Newline,是两个字
我需要在不同的文件上多次执行相同的perl脚本. 为了简化过程,我试图将perl脚本保存为bash字符串, 并在字符串上调用perl,如以下代码的"不工作"部分: #!/bin/sh # works perl -e 'print 1;' # doesn't work S="'print 1;'" perl -e $S perl -e $S 我将获得以下输出: 1Can't find string terminator "'" anywhere before EOF at -e line 1. Can't find string terminator "'" anywhere before EOF at -e line 1. 我在这里做错了什么?我可以以其他方式达到相同的效果吗? 解决方案 您的字符串中的引号$S: #!/bin/sh # works perl -e 'print 1;' # also works S='print 1;'
我在尝试在perl单线上打印单个引号时遇到了这个问题.我最终发现您必须用'\''逃脱它们.这是一些代码来说明我的问题. 让我们从打印文本文件开始. perl -ne 'chomp; print "$_\n"' shortlist.txt red orange yellow green blue 现在让我们打印每行文件的名称. perl -ne 'chomp; print "$ARGV\n"' shortlist.txt shortlist.txt shortlist.txt shortlist.txt shortlist.txt shortlist.txt 然后我们可以在每行周围添加单个引号. perl -ne 'chomp; print "'$_'\n"' shortlist.txt shortlist.txt shortlist.txt shortlist.txt shortlist.txt shortlist.txt 等待无效.让我们再试一
我试图通过以下方式通过perl脚本设置环境变量: 我在/root 下创建了.profile .profile有一个export命令说: export LD_LIBRARY_PATH=/ 我的perl脚本是test.pl,它具有: #!/usr/bin/perl system(". /root/.profile"); 当我执行./test.pl时,LD_LIBRARY_PATH不更改. 我在做什么错? 解决方案 您的当前脚本甚至都不会更改Perl脚本本身中的环境变量.相反,它将外壳称为子过程.该外壳过程执行. /root/.profile,该过程仅在该外壳过程中更新$LD_LIBRARY_PATH 您可以通过更新%ENV: 来更改perl脚本中的环境变量(更确切地说,在运行Perl脚本的过程中) $ENV{LD_LIBRARY_PATH} = '/'; # or some more reasonable value as perld
我正在尝试在当前DIR中打印所有PDF. 当我在CMD(singlepdf.sh)中调用此BASH脚本时: '"C:\Program Files (x86)\Adobe\Reader 10.0\Reader\AcroRd32.exe"' /t Gemeinde_348_BioID_842_alt.pdf一切正常. 使用此内容调用multiplepdfs.sh: declare -a pdfs=(*.pdf) for pdf in ${pdfs[@]}; do echo -e "\nprinting **$pdf** with AcroRd32.exe...\n" '"C:\Program Files (x86)\Adobe\Reader 10.0\Reader\AcroRd32.exe"' /t $pdf sleep 3 done 回声显示文件在循环中正确地址 - 但是我得到了错误"C:\Program Files (x86)\Adobe\Reader 10
我想在文件中仅替换最后一个字符串" delay",然后在我的文件中替换" ens_delay",然后在最后一个之前删除其他字符串: 输入文件: alpha_notify_teta='' alpha_notify_check='YES' text='CRDS' delay='' delay='' delay='' textfileooooop='' alpha_enable='YES' alpha_hostnames='' alpha_orange='YES' alpha_orange_interval='300' alpha_notification_level='ALL' expression='YES' delay='9' textfileooooop='' alpha_enable='YES' alpha_hostnames='' 输出文件:(预期值) alpha_notify_teta='' alpha_notify_check='YES' text='CR
$ bl 1 $ sh -c 'bl 1' sh: bl: command not found bl脚本位于用户路径扩展中(/home/user/.local/bin)中,但sh环境似乎不知道它,bash是.主/usr/bin/sh可执行的符号链接到/usr/bin/bash. 将符号链接放在/usr/local/bin指向本地bl脚本中的符号链接似乎确实可以解决该问题.手动扩展路径也可以解决它,这是我真正不了解的事情,因为Bash和SH都知道该路径. $ export -p |grep PATH= declare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/bin:~/.local/bin" $ sh -c 'export -p |grep PATH' export PATH="/usr/local/sbin:/usr/local/bin:/usr/bin:~/.local/bin" "缺少某些东西,您必须找到它",但是
想象一下这样的道路: /a/b/c/d/e/... 其中...可以更深入任何层次,即,我不知道会有2、3还是13级. . 我如何使用freebsd shell,例如/bin/sh,提取此路径的第一个" n"部分?例如,前4个级别,以便我得到/a/b/c/d? 解决方案 您可以使用cut: s='/a/b/c/d/e/f/g/h/i/j/k' echo "$s" | cut -d/ -f1-5 /a/b/c/d 或如果您使用的是BASH,则可以使用shell数组: IFS=/ arr=($s) 然后从数组打印所需的元素: IFS=/ echo "${arr[*]:0:5}" /a/b/c/d
我在$路径变量中定义了相同的路径6次. 我没有登记检查它是否有效. 如何删除重复项? $路径变量看起来像这样: echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin 我将如何将其重置为 /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games 解决方案 您只执行:
我正在尝试设置正确的PATH,但是我想知道它应该包含什么.如果我有 /usr/bin/ls /usr/local/bin/ls 我想喜欢/usr/local/bin中的一个,我应该使用以下哪个? PATH=/usr/local/bin/ls:/usr/bin/ls PATH=/usr/local/bin:/usr/bin 或其他东西? 这不是本身 一个适合堆栈溢出的问题. 我希望这将作为一般计算或太宽. 但是初学者经常需要答案,所以我希望这不会被删除. 解决方案 PATH仅与目录一起使用,而不是单个文件 来自 posix posix posix posix standard standard standard emposime)/p> 路径 该变量应代表某些功能和实用程序在搜索仅由文件名中知道的可执行文件时适用的路径前缀的顺序.前缀应由结肠(':')隔开. [...]列表应从头到尾搜索,将文件名应用于每个前缀,直到找到指定名称并找到适当执行
我正在尝试为Magento 1.9安装新发布的安全补丁.我正在使用窗口系统. 我会遇到以下错误. D:\xampp\htdocs\magento>sh PATCH_SUPEE-1533_EE_1.13.x_v1-2015-02-10-08-18-32.sh ERROR: "/app/etc/" must exist for proper tool work. 我正在运行CMD和SH工作正常 我也尝试了git.但是遇到同样的错误 不在Linux上工作 任何人都可以告诉我什么是确切的问题以及如何解决. 谢谢 解决方案 能够使其在Windows Machine以及Patch_supee-5344_CE_1.8.0.0.0_v1-2015-02-10-02-10-08-10-08-10-38.sh. 问题是:current_dir = $PWD_BIN/(行60),$ pwd_bin的值在同一文件pwd_bin = which pwd(第35行)
我正在尝试在VPS上安装乘客和NGINX. 我遵循这些指令当前版本的所有来源. 但是,当我为nginx运行Phusion乘客安装程序时,与GCC编译器一起出现了问题: Compiling and installing Nginx... # sh ./configure --prefix='/opt/nginx' --with-http_ssl_module --with-http_gzip_static_module --with-cc-opt='-Wno-error' --add-module='/usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.17/ext/nginx' checking for OS + Linux 2.6.32-220.el6.x86_64 x86_64 checking for C compiler ... not found ./configure: error: C compiler g