小编mor*_*och的帖子

将空参数传递给 sudo -i

下面是我想使用的 bash 脚本示例sudo -i

#!/bin/bash

echo "arg 1: $1"
echo "arg 2: $2"
Run Code Online (Sandbox Code Playgroud)

当我使用一个空参数正常运行此命令时,它会按预期运行:

$ /tmp/args.sh "" two
arg 1:
arg 2: two
Run Code Online (Sandbox Code Playgroud)

使用简单的 sudo,我得到了预期的结果:

$ sudo /tmp/args.sh "" two
arg 1:
arg 2: two
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用-i(获取用户的 shell 和登录脚本),第一个参数突然消失:

$ sudo -i /tmp/args.sh "" two
arg 1: two
arg 2:
Run Code Online (Sandbox Code Playgroud)

我无法找出任何方法来引用或转义第一个空论点。

注意:我已经找到了一种解决方法,方法是写入/tmp/args.sh "" two文件,然后使用 执行该文件sudo -i,但我想知道是否有任何方法可以直接从命令行实现此目的。

linux bash shell sudo

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

CMake动态链接`/ usr / local / lib`中的`.a`文件

我想针对另一个静态库对程序进行静态编译,对于本示例,我正在使用zeromq。这是我的CMakeLists.txt

cmake_minimum_required(VERSION 2.6)
add_executable( test test.cpp )
find_library(ZMQ NAMES libzmq.a)
message(STATUS ${ZMQ})
target_link_libraries( test ${ZMQ} )
Run Code Online (Sandbox Code Playgroud)

.a我运行时会找到文件mkdir build && cd build && cmake ..

-- /usr/local/lib/libzmq.a
Run Code Online (Sandbox Code Playgroud)

但是,如果我检查link.txt文件,该库是动态链接的:

/usr/bin/c++ CMakeFiles/test.dir/test.cpp.o \
    -o test -rdynamic /usr/local/lib/libzmq.a
Run Code Online (Sandbox Code Playgroud)

奇怪的是,如果我将文件移动到另一个目录,说/usr/lib再运行cmake ..一次,它将找到该库的新路径:

-- /usr/lib/libzmq.a
Run Code Online (Sandbox Code Playgroud)

但是现在它神奇地变成了静态链接:

/usr/bin/c++ CMakeFiles/test.dir/test.cpp.o \
    -o test -rdynamic -Wl,-Bstatic -lzmq -Wl,-Bdynamic
Run Code Online (Sandbox Code Playgroud)

同样的事情也适用于我链接到的其他库。

为什么我所有的库都/usr/local/lib被动态链接?

c++ cmake

3
推荐指数
1
解决办法
2654
查看次数

标签 统计

bash ×1

c++ ×1

cmake ×1

linux ×1

shell ×1

sudo ×1