我已经四处搜索,从我的角度来看,使用Backticks是我解决此问题的唯一方法.我正在尝试在目录中的每个文件中调用perl的mdls命令,以查找其最后访问的时间.我遇到的问题是,在我从find中的文件名中,我有没有示例的空间,显然不喜欢.是否有一种简单的方法可以逃避文件名中的所有空白,然后再将其传递给mdls.如果这是一个明显的问题,请原谅我.我是Perl的新手. my $top_dir = '/Volumes/hydrogen/FLAC'; sub wanted { # Learn about sub routines if ($File::Find::name) { my $curr_file_path = $File::Find::name. "\n"; `mdls $curr_file_path`; print $_; } } find(\&wanted, $top_dir); 解决方案 如果
以下是关于 backticks 的编程技术问答
我正在尝试执行shell命令,然后使用shell脚本将输出保存到变量中.因此,我使用这样的背景: out=`ls -l` print $out 该代码工作正常,我可以将其用于任何其他Shell命令,但是当我尝试执行" Python - Version"以检查Python版本时.我有奇怪的问题. Backtict与" Python"命令不适用于与任何其他命令的正常工作时,它将输出打印到屏幕上,并将其保存为变量$ out.因此,如果我这样做: out =`python --version` print "my python version is "$out 结果: Python 2.6.1 my python version is 我也试图使用$()代替背部,但没有运气.有什么想法吗? 解决方案 您在等于标志之前有一个空间: out =`python --version` 应该是: out=`python --version` 更新
我需要在bash shell上执行以下代码: mogrify -resize 800x600 *JPG 由于宽度和高度是变量,所以我尝试了: `mogrify -resize $widx$hit *JPG` 但是,在编译中,我得到了Global symbol "$widx" requires explicit package name at getattach.pl line 131.的错误,这是因为编译器将$ widx视为新的未宣布变量. 我尝试在背景中插入双引号,但是执行代码没有任何消息. 在壳执行中插入变量名称的正确方法是什么?他们可以连接吗? 解决方案 要将变量插入任何插值字符串(无论是qq//>>>或qx或qr//),只需执行"this is $foo!"就足够了:变量名(此处:$foo)是界定的由不能成为普通变量名称的一部分的!. 当字符串的一部分可以成为Perl的命名规则的一部分时,这并不容易.示例: my $genes =
我想单位测试使用Backticks的Perl程序.有没有办法嘲笑背部,以便他们做一些与执行外部命令不同的事情? 另一个问题显示了我需要的,但是在Ruby中.不幸的是,我不能选择将Ruby用于此项目,也不想避免回避. 解决方案 您可以*模拟内置的 功能. Perl遇到Backticks或qx表达式时会调用您的模拟功能. BEGIN { *CORE::GLOBAL::readpipe = \&mock_readpipe }; sub mock_readpipe { wantarray ? ("foo\n") : "foo\n"; } print readpipe("ls -R"); print `ls -R`; print qx(ls -R); $ perl mock-readpipe.pl foo foo foo * - 如果您有 Perl版本5.8.9 或更高版本. 其他解决方案 而不是使用backticks,可以从# applicatio
我正在尝试测试特定的服务器正在启动并在某个端口上运行,因此我正在使用 $result = `echo exit | telnet 127.0.0.1 9443`; print $result; 在这里,我正在使用Localhost进行隐私问题 预期的行为是它应该打印" ...无法在端口9443上打开与主机的连接:连接失败",这样我就知道服务器未运行.但是它打印一个空字符串 对此的任何帮助 解决方案 失败消息打印到STDERR,而Backticks仅返回STDOUT. 您可以将STDERR流将流到STDOUT流 重定向 $result = `echo exit | telnet 127.0.0.1 9443 2>&1`; 请参阅 i/o REDIRECTION . 使用各种形式的open,还有更多圆形的方法可以做到这一点.请参阅 capture :: Tiny :: Tiny 简单的. use warnings 'all'; use stri
我做了很多Google将程序的Stdout和Stderr重定向到Perl中的变量,最初我尝试使用 open 和 Backticks ,但未能使用捕获变量的错误信号. 我发布了这个问题,因为现在我有解决方案并希望它能对他人有所帮助. 解决方案 使用Backticks(````)将Stdout和STDERR同时进入变量使用. 确保 2>&1 是命令末尾的位置,将stderr重定向到stdout. 提供错误的命令时, my $Temp_return; $Temp_return = `lse 2>&1`; print "return = " . $Temp_return . "\n"; 错误输出是 return = 'lse' is not recognized as an internal or external command, operable program or batch file. 对于正确的命令,您将相应地获得结果. 作为其他信
inter.pl的代码是: use strict; use warnings; my $var1=`cat /gra/def/ment/ckfile.txt`; #ckfile.txt doesn't exist print "Hello World"; exit 0; 当我执行Inter.pl(perl inter.pl)并检查退出状态时,我将其视为0.我知道为什么它出现为0,因为它是一个在子里执行的背景xterm,然后在执行后返回.因此,在儿童xterm中不等于0的退出状态. 但是,我想要的是,当脚本中的任何地方都出现在脚本中的任何地方,无论是在脚本中执行内部命令还是在主脚本中,或者在主脚本中时,它应该在此处退出,然后以退出状态不等于0. 像这里一样,由于ckfile.txt不存在,因此`cat/gra/def/net ckfile.txt`都会给出一些错误.现在,由于它是脚本中的错误命令,因此脚本应以状态!= 0退出. 如何实现? 解决方案 您可
perl支持运行外部程序的三种方式(我知道): system: system PROGRAM LIST 如: system "abc"; Backticks如下: `abc`; 通过管道运行: open ABC, "abc|"; 它们之间有什么区别?这是我所知道的: 您可以使用背景和管道轻松获取命令的输出. 就是这样(在未来的编辑中更多?) 解决方案 system():运行命令并返回命令的退出状态 Backticks:运行命令并返回命令的输出 管道:运行命令并允许您将它们用作hander 还会将执行程序的Stdout重定向到变量,系统将其发送到您的主程序的Stdout. 其他解决方案 perlfunc的开放文档解释了管道的文件. 系统将其输出发送到标准输出(和错误) Backticks捕获标准输出并将其返回(但不是标准错误) 管道开放允许您捕获输出并从文件句柄读取它,或者打印到文件句柄并将其用
我试图了解r. 从我可以看出的话,这在r. 的?Quotes文档页面中没有解释 例如,在r控制台上: "[[" # [1] "[[" `[[` # .Primitive("[[") 它似乎正在返回相当于: get("[[") 解决方案 一对背景是一种参考其他保留或非法的符号的名称或组合的方法.保留的单词是if是语言的一部分,而非法的单词包括c a t之类的非句法组合.这两个类别(保留和非法)在r文档中称为non-syntactic names. 因此, `c a t` `+` # is equivalent to typing in a syntactic function name function (e1, e2) .Primitive("+") 正如提到的评论者所提到的,?Quotes确实包含一些有关Names and Identifiers: 的背景信息的信息. 标识符由一
有两种方法可以在bash中捕获命令行的输出: 传统bourne shell backticks ``: var=`command` $()语法(据我所知,它是特定于狂欢的,或者至少不受像原始bourne这样的非固醇旧壳的支持) var=$(command) 与Backticks相比,使用第二种语法有任何好处吗?还是两个完全100%等效的? 解决方案 主要的是 nest ,命令中的命令的能力,而不会失去您的理智,试图弄清楚某种形式的逃脱是否会在Backticks上起作用. 一个例子,尽管有些人为: deps=$(find /dir -name $(ls -1tr 201112[0-9][0-9]*.txt | tail -1l) -print) 它将为您提供/dir目录树中所有文件的列表,该文件的名称与2011年12月的最早日期文件相同(a). . 另一个示例就像获取父目录的名称(不是完整路径): pax> cd /home/pa
在我的项目中,我想编写一个脚本,以检查网络中的每个设备是否在线/可访问.我有一种称为pingtest的方法,现在起作用. def pingtest(destination) system("ping -n 2 #{destination}") if $? == 0 #checking status of the backtick puts "\n Ping was successful!" else close("Device is unreachable. Check the config.txt for the correct IPs.") #close() is just print & exit.. end end 现在,我想通过网络中的其他设备通过SSH会话进行ping: #------------------------
我在与Android有关的堆栈溢出上看到了一个类似的问题,但是我想知道我是否应该使用backticks(`)或double Qualdes(") - 使用Python-选择表名称或ROWID或您有什么. 我尝试了单引号 - 喜欢select 'rowid', * from 'tbl' order by 'rowid'.单人引号在某些情况下有效,但不是全部.我学会了使用双引号或背部引号,然后我正在查看 sqlite数据库浏览器,我注意到它使用了Backticks. 我真的很喜欢在Python的字符串周围添加双引号,因为我来自Java,所以很自然地做cursor.execute("select 'rowid',* from 'table';"),而且很容易做回头(双引号需要)后斜切,使查询看起来有些混乱). 但是,我只是想确保背部可移植(所有版本的 解决方案 SQL标准说,字符串必须使用'single quotes',而标识符(例如表和列名),当引用时,必须使用"double
如果我有一个变量,它在外壳还是在子壳中扩展了吗?例如: FOO=BAR BAZ=`[[ $FOO == BAR ]] && echo 1 || echo 0` $FOO扩展时是否定义?例如,子壳会看到以下内容: [[ $FOO == BAR ]] && echo 1 || echo 0 或以下: [[ BAR == BAR ]] && echo 1 || echo 0 解决方案 (您应该真正使用$(...)而不是backticks.但是原理是相同的.) 要在子壳中执行的命令由命令替换表格中的字面字符组成,除了特质,有时甚至在背部内部的后斜线周围造成混淆的规则.因此,可变扩展发生在子壳内部. 例如, x=$(foo=bar && echo $foo) 将定义x=bar,但不会导致foo在外壳中定义的(重新).
我想自动逃脱一些特殊的字符. 我想到了呼应该字符串并通过一些SED进行管道.这似乎在背部内部不起作用. 那为什么 echo "foo[bar]" | sed 's/\[/\\[/g' 返回 foo\[bar] 但是 FOO=`echo "foo[bar]" | sed 's/\[/\\[/g'` && echo $FOO 只是返回 foo[bar] ? 与SED相比,TR在背部的内部完美工作: FOO=`echo "foo[bar]" | tr '[' '-' ` && echo $FOO 返回 foo-bar] 解决方案 您需要逃脱背部的后斜线. FOO=`echo "foo[bar]" | sed 's/\\[/\\\\[/g'` && echo $FOO 另外,使用$()(这实际上是推荐的方法). FOO=$(echo "foo[bar]" | sed 's/\[/\\[/g') && echo $
我遇到问题,让我的ShellScript使用Backticks工作.这是我遇到的脚本的示例版本: #!/bin/sh ECHO_TEXT="Echo this" ECHO_CMD="echo ${ECHO_TEXT} | awk -F' ' '{print \$1}'" result=`${ECHO_CMD}`; echo $result; result=`echo ${ECHO_TEXT} | awk -F' ' '{print \$1}'`; echo $result; 此脚本的输出是: sh-3.2$ ./test.sh Echo this | awk -F' ' '{print $1}' Echo 为什么使用变量为命令的第一个反击实际上并未实际执行完整命令,而仅将第一个命令的输出与第二个命令一起返回?我缺少一些东西,以获取第一个背景来执行命令? 解决方案 您需要使用eval使其正常工作 result=`eval ${ECHO_CMD}`;
为命令:/usr/bin/sh -c" ls 1`"(1之后的回声). 如何成功运行?在"`"之前添加后斜线不起作用. "正如我们所知,我也是一个特殊的字符,我也尝试用单个报价来围绕它(/usr/bin/sh -c" ls 1''"),但这也不起作用. 错误总是: % /usr/bin/sh -c "ls 1\`" Unmatched ` 解决方案 您需要逃脱背部,但也逃脱了后斜线: $ touch 1\` $ /bin/sh -c "ls 1\\\`" 1` 您必须逃脱"两次"的原因是因为您在环境(例如shell脚本)中输入此命令,该命令一次解释了一次双引号的字符串.然后,它被子壳再次解释. 您还可以避免双重报价,因此避免了第一个解释: $ /bin/sh -c 'ls 1\`' 1` 另一种方法是将文件名存储在变量中,并使用该值: $ export F='1`' $ printenv F 1` $ /bin/sh -c 'ls
以前,我的所有查询在CI 2.0版中都运行良好,但是当我升级到 2.0.3 时,我的一些精选查询被打破了. ci正在自动添加 backticks(`````````````'' CI用户手册已指示在 中添加第二个参数 db->选择 AS false ,但仍然不起作用. 代码如下: class Company_model extends MY_Model { ---------------- $this->db->select(' count('.$fieldname. ') as num_stations'); $this->db->select(" CONCAT_WS(',', clb_company.address1, clb_company.address2, clb_company.city, clb_company.state, clb_company.zipcode ) as companyAddress"); $this->
问题 当i filter()或select()列名称时,我的内联代码块断裂,该列名称通常会在dplyr中使用Backticks定义. 示例数据 ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE) library(dplyr) library(knitr) library(lazyeval) df % select(`a a`=a, `b b`=b) ``` 内联代码块 我正在尝试`r df %>% filter(`a a` == 1) %>% select(`a a`) %>% as.numeric()`之类
我目前正在从事铁轨应用程序,该应用程序是另一个Rails应用程序的更新. 我有更新过程 下载新版本zip 提取到适当位置 同步资产 捆绑安装 预编译资产 使用-Bundle Exec Rails Server启动服务器 我对最后一步有问题. 我运行时: Dir.chdir('../other-project') `bundle exec rails server -d -p 3000` 从Updater应用程序中,它似乎正在从Updaters Bundle中提取 而不是应该从中拉出的新应用程序包. 更新流是用Rails 4编写的,它正在更新的应用程序是Rails 3. 当我尝试启动服务器时,我会得到以下内容: /home/vagrant/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/railties-4.1.4/lib/rails/railtie/configurati