将ANSI颜色代码放入JobLauncherTestUtils.setJob(Job job)
时,它们必须用@Configuration
public class TestBatchConfiguration implements MergedBeanDefinitionPostProcessor {
@Autowired
@Qualifier("JobA")
private Job job;
@Bean(name="jtestl")
public JobLauncherTestUtils jobLauncherTestUtils() {
JobLauncherTestUtils jobLauncherTestUtils = new JobLauncherTestUtils();
jobLauncherTestUtils.setJob(job);
return jobLauncherTestUtils;
}
/**
* https://stackoverflow.com/questions/22416140/autowire-setter-override-with-java-config
* This is needed to inject the correct job into JobLauncherTestUtils
*/
@Override
public void postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, Class<?> beanType, String beanName) {
if(beanName.equals("jtestl")) {
beanDefinition.getPropertyValues().add("job", getMyBeanFirstAImpl());
}
}
private Object getMyBeanFirstAImpl() {
return job;
}
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
}
包围,否则提示可能会混淆该行的可编辑部分的开始位置。但是,当子命令(PS1
)打印颜色时,\[\]
转义符总是按字面意义写到提示中的,而且在我的历史记录中有足够长的命令,提示会变得混乱。
这是一个例子:
$()
预期:
\[\]
实际({ps1test() {
ps1sub() {
printf '\[\033[32m\]Hello!\[\033[0m\]'
}
PS1='$(ps1sub) \$ '
}
由Git for Windows安装):
$ ps1test
Hello! $
如何让我的shell解释子命令中的bash
转义?
答案 0 :(得分:2)
如果您尝试创建动态提示,则可能更容易通过通过PS1
调用的函数来设置PROMPT_COMMAND
值,例如:
ps1test() {
ps1sub() {
printf '\[\033[32m\]Hello!\[\033[0m\]'
}
PS1="$(ps1sub)"' \$ ' # notice the double-quote
}
PROMPT_COMMAND=ps1test
这对我来说正确地显示为Hello! $
。
我使用prompt.gem来呈现提示,您可以看看它如何configures PROMPT_COMMAND
来获得启发。
答案 1 :(得分:0)
这正是eval
的正确用例:
ps1test() {
ps1sub() {
printf '\[\033[31m\]Hello!\[\033[0m\]';
};
eval PS1="'$(ps1sub) \$ '";
}