相关疑难解决方法(0)

如何修改我的用户PROFILE文件以将我创建的脚本文件夹附加到PATH变量的末尾?

如何修改我的用户PROFILE文件以将我创建的脚本文件夹附加到PATH变量的末尾?
我不完全确定这意味着什么.谁能解释一下.
谢谢 :)

unix linux solaris

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

如何回显包含双引号的文本

我需要回显一些文字。喜欢text "hey"

如果我尝试将代码echo "text "hey""输出为text hey

那么,如何显示双引号呢。谁能帮我这个。

linux bash echo

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

Keytool错误:Keystore被篡改...特殊字符

我知道已经有一些关于此错误的帖子,但我找不到适合我的问题的答案:

我使用以下命令创建了一个AES密钥:

keytool -genseckey -alias TEST -keyalg AES -keysize 128 -storepass "a#b$c<d>" 
-storetype JCEKS -keystore /usr/my/path/test.jck
Run Code Online (Sandbox Code Playgroud)

然后我尝试从java代码访问密钥库:

String password = "a#b$c<d>";

char[] passwordChars= password.toCharArray(); 

// loading the file containing the key
InputStream inputStreamFichierCle;
try {
    inputStreamFichierCle = new FileInputStream(filePath);
    keyStore.load(inputStreamFichierCle, passwordChars);
}
Run Code Online (Sandbox Code Playgroud)

我得到了一个IOException : keystore was tampered with or password was incorrect.

请注意,我尝试使用普通密码(例如:传递),这很有效,所以我想这里的问题与我在密码中使用的特殊字符有关.

发生了什么,我该如何解决这个问题?

java encoding keystore keytool

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

多行双引号字符串会触发随后通过管道传送的单引号命令的历史记录扩展

我在GNU bash,版本4.3.11.

假设我想在文件上打印唯一的行.我正在使用这种方法,它适用于文件:

$ cat a
9
10
9
11
$ awk '!seen[$0]++' a
9
10
11
Run Code Online (Sandbox Code Playgroud)

但是,如果我从stdin获取输入,在多行中使用双引号并输入到awk,则会失败:

$ echo "9
> 10
> 9
> 11" | awk '!seen[$0]++'
bash: !seen[$0]++': event not found
Run Code Online (Sandbox Code Playgroud)

也就是说,bash尝试扩展命令seen,这当然不知道,因为它是一个变量名.但它不应该发生,因为命令放在单引号内.

echo单引号,多行输入效果很好:

$ echo '9
> 10
> 9
> 11' | awk '!seen[$0]++'
9
10
11
Run Code Online (Sandbox Code Playgroud)

有趣的是,它也适用于双引号的单行输入:

$ printf "9\n10\n9\n11" | awk '!seen[$0]++'
9
10
11
Run Code Online (Sandbox Code Playgroud)

我想知道为什么Bash试图扩展历史,如果它发生在多线输入后,即使命令本身使用单引号.

其他考虑:

中间有一个管道也无法修复它:

$ echo "9
> 10
> 9
> 11" | cat - …
Run Code Online (Sandbox Code Playgroud)

bash gnu command-substitution

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

Postgres:MD5 密码/普通密码

我试图了解角色密码应该如何在 Postgres 中运行。

https://www.postgresql.org/docs/current/static/sql-createrole.html表示 ENCRYPTED / UNENCRYPTED

如果提供的密码字符串已经是 MD5 加密格式,那么它会按原样加密存储,

所以我未加密的密码是: MyPassword 。

“MyPassword”的 MD5 哈希值为 48503dfd58720bd5ff35c102065a52d7

如果我做

-- See https://www.postgresql.org/docs/9.6/static/sql-alterrole.html
ALTER ROLE "MeOhMy"
LOGIN
PASSWORD '48503dfd58720bd5ff35c102065a52d7'
;
Run Code Online (Sandbox Code Playgroud)

然后在做的时候尝试使用“MyPassword”

  sudo -u postgres psql meohmy -h 127.0.0.1 -d meohmy_development
Run Code Online (Sandbox Code Playgroud)

当然,我首先被提示输入我的 sudo 密码,然后我被 Postgres 提示“我的密码”

如果我输入 MyPassword 我得到

FATAL:  password authentication failed for user "ralph@dos32.com"
Run Code Online (Sandbox Code Playgroud)

如果我输入 48503dfd58720bd5ff35c102065a52d7,则我可以登录。

我不明白什么?

postgresql md5 role

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

bash 字符串带引号和不带引号有什么区别

在 Bash 脚本中将字符串内容放在引号中是否重要?考虑以下两个变量:

str1=hei
str2="Hi"
Run Code Online (Sandbox Code Playgroud)

bash 中首选上述哪种定义字符串文字的方法?为什么?

string bash

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

命令替换中的bash变量替换

我想做类似以下的事情:

#!/bin/bash

cmd="find . -name '*.sh'"
echo $($cmd)
Run Code Online (Sandbox Code Playgroud)

我期望它会显示当前目录中的所有shell脚本文件,但什么也没发生.

我知道我可以根据这篇文章解决eval的问题

#!/bin/bash

cmd="find . -name '*.sh'"
eval $cmd
Run Code Online (Sandbox Code Playgroud)

所以我的问题是为什么命令替换在这里不起作用,$(...)和eval在问题方面的区别是什么?

bash shell

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

awk中单引号和双引号之间的区别

我有这样的awk声明:

glb_library="my_library"
awk "
        /^Direct Dependers of/ { next }
        /^---/                 { next }
        /^$glb_library:/       { ver=\$0; next }
                               { gsub(/[[:space:]]/, '', \$0); print ver':'\$0 }
      " file
Run Code Online (Sandbox Code Playgroud)

基本上,我已将awk代码括在双引号中,以便glb_library扩展shell变量.我已经确保逃避$角色以防止外壳扩展$0.遵循这里的指导.

awk 给我这个错误:

awk: syntax error at source line 5
 context is
                                   { gsub(/[[:space:]]/, >>>  ' <<<
Run Code Online (Sandbox Code Playgroud)

我想明白:

  • 在内部使用单引号是否合法awk?为什么''不是像空字符串一样""
  • 是否awk区别对待单引号和双引号?

在我用反斜杠转义单引号并用来\"\"表示空字符串而不是代码之后,我的代码工作''.

bash quotes awk

6
推荐指数
3
解决办法
3067
查看次数

如何从tsv文件中提取第一列?

我有一个包含一些数据的文件,我只想将第一列用作脚本的标准输入,但提取时遇到了麻烦。我尝试使用这个

awk -F"\t" '{print $1}' inputs.tsv
Run Code Online (Sandbox Code Playgroud)

但只显示第一列的首字母。我尝试了其他一些方法,但是它要么显示整个文件,要么仅显示第一列的第一个字母。

我的文件如下所示:

Harry_Potter    1
Lord_of_the_rings    10
Shameless    23
....
Run Code Online (Sandbox Code Playgroud)

awk cut sed

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

b2命令在直接调用时查找ICU,但不从间接bash脚本变量中查找

我的bash脚本有这个奇怪的问题.我编译boost作为其中的一部分.脚本调用如下所示:

./b2 --reconfigure ${PARALLEL} link=static cxxflags=-fPIC install boost.locale.iconv=off boost.locale.posix=off -sICU_PATH="${ICU_PREFIX}" -sICU_LINK="${BOOST_ICU_LIBS}" >> "${BOOST_LOG}" 2>&1
Run Code Online (Sandbox Code Playgroud)

该命令非常有效.日志文件显示它发现ICU没有问题.但是,如果我将其更改为从变量运行,它将不再找到ICU(但它仍会编译其他所有内容):

bcmd="./b2 --reconfigure ${PARALLEL} link=static cxxflags=-fPIC install boost.locale.iconv=off boost.locale.posix=off -sICU_PATH=\"${ICU_PREFIX}\" -sICU_LINK=\"${BOOST_ICU_LIBS}\""
$bcmd >> "${BOOST_LOG}" 2>&1
Run Code Online (Sandbox Code Playgroud)

有什么不同?我希望能够使用第二种方法,以便我可以在运行之前将命令传递给另一个函数.

bash boost compilation

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