首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从ruby脚本运行shopt rm -rf

无法从ruby脚本运行shopt rm -rf
EN

Stack Overflow用户
提问于 2015-03-09 16:57:15
回答 1查看 98关注 0票数 0

我有一个红宝石脚本,它需要运行bash builtin command - shopt来删除除少数文件和文件夹之外的所有文件和文件夹。下面是我面临问题的代码段。

代码语言:javascript
复制
class Test1
     def initialize(hostname, user, password)
        begin

                    @hostname = hostname
                    @username = user
                    @password = password

                    @ssh = Net::SSH.start(@hostname, @username, :password => @password)

                    @rm_cmd = "shopt -s extglob; rm -rf !(file1.zip|dir1|dir2|dir3)"

                    cmd = @ssh.exec!(@rm_cmd)

        puts "#{cmd}"


        rescue => e
                puts e
        end 
   end
end


#initailizing the object
Test1.new("ABC", "user1", pass1")

它能够建立到服务器的连接,但是看起来它无法执行@rm_cmd,而rescue块并没有捕捉到它。puts "#{cmd}"打印以下错误消息:

代码语言:javascript
复制
bash: -c: line 0: syntax error near unexpected token `('
bash: -c: line 0: `shopt -s extglob; rm -rf !((file1.zip|dir1|dir2|dir3)'

我试图在括号前给出转义字符,即shopt -s extglob; rm -rf !\(file1.zip|dir1|dir2|dir3\),但它也有效。有人能帮我做更多的调试和工作吗?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-09 20:21:27

尝试转义命令,使用中的shellwords扩展,并将extglob指定为bash选项(更好的原因是远程用户可以拥有其他shell):

代码语言:javascript
复制
require 'net/ssh'
require 'shellwords'

ssh = Net::SSH.start('remote-server', 'user', password: 'password')

command = Shellwords.escape('ls !(Projects|Downloads)')
p ssh.exec!(%Q{/bin/bash -O extglob -c #{command}})
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28947627

复制
相关文章

相似问题

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