小编Dav*_*ond的帖子

将终端颜色延伸到行尾

我有一个生成motd的bash脚本.问题取决于一些终端设置,我不确定颜色是否会延伸到行尾.Othertimes它没有:

例如

广场

VS

盘陀

IIRC只是正常的gnome-terminal,另一个是我的tmux术语.所以我的问题是如何将其扩展到80个字符(或者真正的终端宽度).当然我可以填充到80个字符,但这确实无法解决问题.

这是我的代码片段,它产生了motd:

TC_RESET="^[[0m"                                                                
TC_SKY="^[[0;37;44m"                                                            
TC_GRD="^[[0;30;42m"                                                            
TC_TEXT="^[[38;5;203m"   

echo -n "${TC_SKY}                                                                              

... lots of printing..." 
echo -e "\n                           Welcome to Mokon's Linux!                           \n"

echo -n "${TC_GRD}"                                                             
nodeinfo # Just prints the info seen below...                                                                       
echo ${TC_RESET} 
Run Code Online (Sandbox Code Playgroud)

如何以编程方式从bash更改终端设置或某些内容将颜色更改为行尾?

bash terminal

18
推荐指数
1
解决办法
3445
查看次数

抑制"ISO C99要求使用休息参数"

考虑以下两个宏:

#define PNORM( v, s, ... )  { \
  if( VERBOSITY_CHECK( v ) ) { \
    if( ( errno = pthread_mutex_lock(&server.output_mutex) ) ) { \
      PERROR_LOCKFREE( normal, "\tpthread_mutex_lock failed on output_mutex.\r\n" ) ; \
    } \
    fprintf( stdout, s, ## __VA_ARGS__ ) ; \
    fflush( stdout ) ; \
    if( ( errno = pthread_mutex_unlock(&server.output_mutex) ) ) { \
      PERROR_LOCKFREE( normal, "\tpthread_mutex_unlock failed on output_mutex.\r\n" ) ; \
    } \
  } \
}

#define PERROR_LOCKFREE( v, s, ... ) { \ …
Run Code Online (Sandbox Code Playgroud)

c gcc posix variadic-functions gcc-warning

10
推荐指数
1
解决办法
1万
查看次数

添加服务到名称服务开关

所以我正在尝试向NSS(名称服务交换机)添加服务.请注意GNU指南,了解如何在此处执行此操作.我一直在关注那个指南.我需要实现一个与passwd数据库一起使用的服务.

我遇到的问题是我的模块没有被调用某些功能.让我在这里重现一些代码......

enum nss_status
_nss_myservice_setpwent (void) {
 printf( "@ %s\n", __FUNCTION__ ) ;
 return NSS_STATUS_SUCCESS ;
} ;

enum nss_status
_nss_myservice_endpwent (void) {
 printf( "@ %s\n", __FUNCTION__ ) ;
 return NSS_STATUS_SUCCESS ;
} ;

enum nss_status
_nss_myservice_getpwent_r (struct passwd *result, char *buffer,
   size_t buflen, int *errnop) {

 static int i = 0 ;

 if( i++ == 0 ) {
   printf( "@ %s\n", __FUNCTION__ ) ;
   return init_result( result, buffer, buflen, errnop ) ;
 } else { …
Run Code Online (Sandbox Code Playgroud)

c gnu nss passwd libc

10
推荐指数
1
解决办法
1107
查看次数

VIM功能参数传递

我正在尝试创建一个简单的vim脚本函数,我遇到了麻烦.此函数需要获取两个输入字符串并运行搜索并替换它们的所有实例.我现在有以下内容:

  function! FindAndReplaceAll(from, to)                                           
     echo a:from                                                                   
     :%s/a:from/a:to/gc                                                            
  endfunction   
Run Code Online (Sandbox Code Playgroud)

当我做:

:call FindAndReplaceAll("test", "test2")
Run Code Online (Sandbox Code Playgroud)

echo a:from正常工作但是:%s ...代替了from和to literals.我注意到我的vim语法高亮度甚至没有突出显示那些变量,所以我似乎有一个基本的语法问题.

我的问题是:

  1. 这有什么正确的语法?我很感激为什么而不仅仅是答案的解释.为什么以上不正确?
  2. 无论如何,允许将其称为

    :调用FindAndReplaceAll(test,test2)

所以我不必添加引号......

vim

9
推荐指数
1
解决办法
3847
查看次数

如何在bash中执行脚本名称?

所以我想创建一个可移植的bashrc/bash_profile文件.我有一个单独的脚本,我象征性地链接到.bashrc,.bash_profile等.然后$0我看着根据调用的脚本切换我做的事情.问题是shell调用bashrc脚本当然它执行bash真的$0对我来说意味着什么-bash.$1更多未设置为脚本名称.

所以我的问题是,在bash中如何获取正在执行的脚本的名称.不是执行它的二进制文件,例如bash?

我认为它给了我-bash$1未设置,因为这实在不是一个新的进程.有任何想法吗?

bash shell .bash-profile

7
推荐指数
2
解决办法
1万
查看次数

冻结 __write_nocancel

所以我有一个相当可观的程序,它偶尔会冻结。
该程序使用 Qt、开放场景图和谷歌日志记录。这种冻结发生在谷歌日志中的打印过程中。程序本身正在打印大量调试信息。我能够通过 gdb-server 连接到程序,这是堆栈跟踪:

#0  0x000000397ac0e030 in __write_nocancel () at ../sysdeps/unix/syscall-template.S:82
#1  0x00007f5eecb74aeb in google::LogMessage::SendToLog() () from /lib64/libglog.so.0
#2  0x00007f5eecb71fc7 in google::LogMessage::Flush() () from /lib64/libglog.so.0
#3  0x00007f5eecb721a9 in google::LogMessage::~LogMessage() () from /lib64/libglog.so.0
#4  0x00000000004874a6 in LSDB::process (this=0x242d918, lsp=0x25f9200, circuit=0x24c7af0) at ../src/model/trill/LSDB.cpp:481
#5  0x00000000004a0f6f in Circuit::rx (this=0x24c7af0, eth=0x246fdf0) at ../src/model/trill/Circuit.cpp:355
#6  0x000000000045c950 in Circuit::qt_static_metacall (_o=0x24c7af0, _c=QMetaObject::InvokeMetaMethod, _id=0, _a=0x7fffaade95a0)
    at ../src/model/trill/Circuit.moc.cpp:55
#7  0x000000398798cb9f in QMetaObject::activate (sender=0x2470140, m=<optimized out>, local_signal_index=<optimized out>, argv=0x7fffaade95a0)
    at kernel/qobject.cpp:3547
#8  0x0000000000459610 in FramePublisher::subscription (this=0x2470140, _t1=0x246fdf0) at ../src/model/system/FramePublisher.moc.cpp:98 …
Run Code Online (Sandbox Code Playgroud)

c++ unix io qt glog

6
推荐指数
1
解决办法
4172
查看次数

了解setuid和sudo

我试图了解sudo如何在Linux用户区和Linux内核中运行.从用户的角度来看,我对它并不是那么感兴趣,但我更感兴趣的是从实现/内核的角度来理解它.(我已经讨论过将它放在stackexchange和超级用户之间,但我认为这将是最好的.如果我做出了错误的选择,请随意移动它...)

因此,当内核完成引导时,它会启动init进程,该进程当然具有0的uid.然后可以启动其他进程,例如ssh守护进程.这个新进程继承了其父进程的uid,例如0. sshd现在也启动子进程,每个进程一个.然后完成对尝试登录的用户的身份验证,无论是通过passwd文件,影子文件,pam等.一旦sshd通过它使用的任何方法验证用户,它就会调用setuid/seteuid来更改进程UID.现在我的理解是一个程序只能从root到另一个用户而不是从用户x到root或者用户x到用户y(这是正确的吗?)(使用setuid调用?)

因此,在这方面,内核实际上只知道分配给文件,进程等的uid.用户帐户中的身份验证在用户空间中受到控制,并且通过仅允许根程序进入非根程序来保护.

所以我的问题是,如果以上是正确的,那么sudo是如何工作的.当前运行我的非root帐户的终端如何临时切换到root权限?它是否与sudo进程交互?如果以上是错误的,即使是一点点,我也想知道我错在哪里.

linux sudo pam linux-kernel

6
推荐指数
1
解决办法
5149
查看次数

与Windows上的Mingw的DLL依赖关系

我正在开发一个程序,它使用autotools构建系统并在linux上编译好.为windows构建我正试图让一个mingw交叉编译器为windows工作.现在,当我在linux上编译并移动到窗口时,我当然缺少一些默认情况下未安装在Windows上的dll.这导致dll错误丢失.由于LGPL的限制,我无法静态链接我的程序.

所以我的问题是在这种情况下交叉编译的正确方法是什么?我觉得我需要将我的exe包装在一个安装程序中,该安装程序会自动解析并安装windows的dll依赖项,但我无法找到解释如何执行此操作的内容.基本上我在考虑使用yum/apt-get for windows.如何在Windows上管理dll依赖项?我是一个Linux家伙,不是Windows家伙,所以请耐心等待.

c++ dll mingw autotools cross-compiling

5
推荐指数
1
解决办法
1591
查看次数

如何在vimrc文件中连接环境变量

我想在我的vimrc风格中做一些非常简单的事情.如下所示,我试图将两个环境变量连接到一个局部变量,然后使用该变量.

  let cs=$menv_dotfiles_dir."/vimrc_style/".${CODING_STYLE}.".vim"                
  if filereadable(cs)                                                             
    source cs                                                                     
  endif 
Run Code Online (Sandbox Code Playgroud)

当然上面的方法不起作用,但我认为它表达了我需要做的事情.这样做的正确方法是什么?

与此类似:Vim:基于字符串的源代码但我只有在文件存在时才需要这样做.

vim

4
推荐指数
1
解决办法
4828
查看次数

Perl内联子例程和条件运算符用于排序

所以我有以下代码可行:

my $cmp;                                                                    
if ( $action eq DEL ) {                                                     
    $cmp = \&cmpb;                                                          
}                                                                           
else {                                                                      
    $cmp = \&cmpf;                                                          
}                                                                           

foreach my $x ( sort $cmp keys %y ) {
    # do something
}
Run Code Online (Sandbox Code Playgroud)

这里的cmpb和cmpf是:

sub cmpf { $a cmp $b }                                                          
sub cmpb { $b cmp $a } 
Run Code Online (Sandbox Code Playgroud)

现在我的问题是我宁愿做类似的事情:

foreach my $x ( sort $action eq DEL ? \&cmpb : \&cmpf keys %y ) {
    # do something
}
Run Code Online (Sandbox Code Playgroud)

甚至更好:

foreach my $x ( sort $action eq DEL ? …
Run Code Online (Sandbox Code Playgroud)

perl

4
推荐指数
1
解决办法
383
查看次数

标签 统计

bash ×2

c ×2

c++ ×2

vim ×2

.bash-profile ×1

autotools ×1

cross-compiling ×1

dll ×1

gcc ×1

gcc-warning ×1

glog ×1

gnu ×1

io ×1

libc ×1

linux ×1

linux-kernel ×1

mingw ×1

nss ×1

pam ×1

passwd ×1

perl ×1

posix ×1

qt ×1

shell ×1

sudo ×1

terminal ×1

unix ×1

variadic-functions ×1