有一个交互式 shell 控制台,我可以进入它,在控制台内运行特定的命令集并从中退出。
现在我想编写一个 bash 脚本,它连接到交互式 shell 控制台并以静默方式运行我的命令,最后退出而不进行任何交互。这意味着我希望一切以非交互方式自动化。我有什么想法可以实现这一目标吗?
我正在尝试类似的东西,比如说,blabla shell 是这里的交互式控制台,它总是带我进入交互模式:(
/usr/bin/blabla shell << EOF
do A,
do B,
do C
quit
EOF
Run Code Online (Sandbox Code Playgroud)
我可以在这里找到这个问题的长/特定版本 -> 在 shell/bash 脚本中配置 Flume - 避免交互式 Flume shell 控制台
我正在使用easymock + powermock编写测试,因此使用powermock的原因是模拟静态方法。
我的测试课看起来像:
import static org.powermock.api.easymock.PowerMock.mockStatic;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
@RunWith(PowerMockRunner.class)
@PrepareForTest(StaticTest.class)
public class DummyTest {
@Test
public void testDummy() {
mockStatic(StaticTest.class);
Mockito.when(StaticTest.testMethod()).thenReturn("hello world");
........
}
Run Code Online (Sandbox Code Playgroud)
这是我的测试依赖项和版本:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>1.4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-easymock</artifactId>
<version>1.4.12</version>
<scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
运行测试,我得到了初始化错误,如下所示:
java.lang.NoClassDefFoundError: net/sf/cglib/proxy/Enhancer
at org.powermock.api.extension.proxyframework.ProxyFrameworkImpl.isProxy(ProxyFrameworkImpl.java:29)
at org.powermock.reflect.internal.WhiteboxImpl.getUnmockedType(WhiteboxImpl.java:1783)
at org.powermock.reflect.internal.WhiteboxImpl.getType(WhiteboxImpl.java:2237)
at org.powermock.reflect.internal.WhiteboxImpl.setInternalState(WhiteboxImpl.java:327)
at org.powermock.reflect.proxyframework.RegisterProxyFramework.registerProxyFramework(RegisterProxyFramework.java:18)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at …Run Code Online (Sandbox Code Playgroud) 在puppet中,您可以通过执行以下操作来chown/chmod单个文件:
file {
'/var/log/mylog/test.log':
ensure => 'present',
mode => '0644',
owner => 'me';
}
Run Code Online (Sandbox Code Playgroud)
两个问题:
ensure =>'present'将确保'/var/log/mylog/test.log'存在,如果它不存在则创建它.如果文件存在,我有什么方法可以让它做动作,如果文件不存在,不打扰创建/删除它,只是忽略它并继续.
假设我在/ var/log/mylog /下面有3个文件,我想在一个批处理中对它们chown/chmod,而不是在我的puppet代码中有3个文件资源部分.我可以做下面这样的事情(因为下面的代码不存在,现在是我的梦想^ _ ^):
files {
'/var/log/mylog/*.log':
ensure => 'present',
mode => '0644',
owner => 'me';
}
Run Code Online (Sandbox Code Playgroud)根据Hbase设计,Hbase使用memstore存储写入,最终当memstore达到大小限制时,它会将其刷新到HDFS.这个冲洗练习是在主题背后自动发生的.
在我的情况下,我想进行hdfs迁移,从一个集群迁移到另一个集群,我需要确保在我在源集群中关闭hbase进程之前没有任何内存留在内存中.无论如何我们可以手动强制刷新即使memstore没有达到限制.
==问题添加==
进一步的问题:你怎么知道冲洗完成了?通过指标?
当我尝试使用pip安装lxml时,我遇到异常"Connection by peer":
Downloading/unpacking lxml
Downloading lxml-3.0.1.tar.gz (3.2Mb): 643Kb downloaded
Exception:
Traceback (most recent call last):
File "/home/dummyuser/work/virt-dev-env/local/lib/python2.7/site-packages/pip-1.1-py2.7.egg/pip/basecommand.py", line 104, in main
status = self.run(options, args)
File "/home/dummyuser/work/virt-dev-env/local/lib/python2.7/site-packages/pip-1.1-py2.7.egg/pip/commands/install.py", line 245, in run
requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle)
File "/home/dummyuser/work/virt-dev-env/local/lib/python2.7/site-packages/pip-1.1-py2.7.egg/pip/req.py", line 985, in prepare_files
self.unpack_url(url, location, self.is_download)
File "/home/dummyuser/work/virt-dev-env/local/lib/python2.7/site-packages/pip-1.1-py2.7.egg/pip/req.py", line 1109, in unpack_url
retval = unpack_http_url(link, location, self.download_cache, self.download_dir)
File "/home/dummyuser/work/virt-dev-env/local/lib/python2.7/site-packages/pip-1.1-py2.7.egg/pip/download.py", line 451, in unpack_http_url
download_hash = _download_url(resp, link, temp_location)
File "/home/dummyuser/work/virt-dev-env/local/lib/python2.7/site-packages/pip-1.1-py2.7.egg/pip/download.py", line 368, in _download_url
chunk = resp.read(4096)
File "/usr/lib/python2.7/socket.py", line 380, …Run Code Online (Sandbox Code Playgroud) 可悲的是,我的hbase客户端语言是Python,我现在使用的是happybase,它基于thrift AFAIK.我知道到目前为止,节俭仍然不支持过滤器,协处理器(如果我错了,请纠正我).有人可以指出我可以跟踪计划/进度的任何Jira项目吗?我能找到的唯一一个来自"Hbase in Action":
"与新Java API匹配的Thrift服务器":https: //issues.apache.org/jira/browse/HBASE-1744
"使Thrift提供端点协处理器":https: //issues.apache.org/jira/browse/HBASE-5600
第一个似乎没有覆盖过滤器,第二个没有更新很长一段时间.
有人可以详细解释当下一个处理器无法接收或处理任何数据时,像GetFile或QueryDatabaseTable这样的NiFi处理器如何存储行?数据是否会在内存中传输,然后在大小超过某个阈值时交换到磁盘?它可能会有内存不足或数据丢失的风险吗?
我有一个带有main类的jar,它可以执行如下:java -jar test.jar
在罐子里面,我有类似的东西
public static void main(String[] args) throws IOException {
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("config.properties");
Properties prop = new Properties();
prop.load(is);
//then I wanna fetch all the properties in the config.properties file
}
Run Code Online (Sandbox Code Playgroud)
我同时运行:
java -jar test.jar
java -jar test.jar -cp/tmp(其中config.properties所在)
java -jar test.jar -cp /tmp/config.properties(显然它不起作用,但是让你知道我想在这里实现的目标)
虽然我把config.properties文件的路径放在我的$ PATH和$ CLASSPATH下,但代码都不起作用,所有三个都抛出了NPE.
关键是,从长远来看,我将配置文件放在$ {my-config-path}中,并正确读取/处理它.但暂时我只想要快速而肮脏的东西.
我希望项目的版本号为正常发布版本的以下格式:
<version>1.0-SNAPSHOT</version>
<version>1.0.1-SNAPSHOT</version>
......
Run Code Online (Sandbox Code Playgroud)
另一方面,我希望为每个合并的变更都有一个构建的工件,如下所示:
<version>1.0-SNAPSHOT-${timestamp}</version>
Run Code Online (Sandbox Code Playgroud)
我可以使用maven配置文件实现这一目标吗?就像是:
<profiles>
<profile>
<id>normal</id>
<version>1.0-SNAPSHOT<version>
</proifle>
<profile>
<id>build</id>
<version>1.0-SNAPSHOT-${timestamp}<version>
</proifle>
</profiles>
Run Code Online (Sandbox Code Playgroud)
所以我可以建立它像:
mvn package -P normal // this gives me artifact-1.0-SNAPSHOT.jar
or
mvn package -P build // this gives me artifact-1.0-SNAPSHOT-${timestamp}.jar
Run Code Online (Sandbox Code Playgroud)
如果配置文件可以解决这个问题,那么其他方法是什么?
我是python的新手,只是想知道python执行以下操作的最佳方法是什么:
file='/var/log/test.txt'
==action==
Run Code Online (Sandbox Code Playgroud)
在== action ==之后,我想得到的路径和文件分开如下:
path='/var/log'
file_name='test.txt'
Run Code Online (Sandbox Code Playgroud)
我不是问如何做到这一点,我问最有效的方法是使用最少的代码行来做到这一点.
= EDIT =
如果我的文件='test.txt'而不是file ='/ var/log/test.txt'怎么办?我更可能期望:
path='.'
path='test.txt'
Run Code Online (Sandbox Code Playgroud)
以外
path=''
file_name='test.txt'
Run Code Online (Sandbox Code Playgroud)
这是什么意思呢?
python ×3
hbase ×2
java ×2
apache-nifi ×1
artifactory ×1
build ×1
hadoop ×1
hdfs ×1
jar ×1
junit ×1
maven ×1
mockito ×1
persistence ×1
pip ×1
powermock ×1
profile ×1
properties ×1
puppet ×1
scripting ×1
shell ×1
storage ×1
substring ×1
thrift ×1
versioning ×1
virtualenv ×1