标签: ksh

在 PS1 变量中设置 ${PWD} 在 Korn Shell 中不起作用

我已将以下内容设置为 Solaris 5.10 中的 PS1 变量

PS1="\[${USER}@`uname -n` ${PWD}]\$ "
Run Code Online (Sandbox Code Playgroud)

当我启动终端会话时,它显示正确的目录(即我的主目录),但是当我更改为其他目录时,它实际上不起作用。它仍然继续显示我的主目录。

知道为什么会发生这种情况以及如何纠正这个问题吗?

ksh ps1

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

ksh 语法错误:`if' 不匹配

我是 ksh 世界的新手,我现在有一个脚本问题。此行下的脚本位于 UNIX 机器中用户的 .profile 文件中,当我尝试与他连接时,总是出现错误

home/userTest/.profile: 语法错误:`if' 不匹配

我不知道如何解决这个问题,因为我想这个脚本定义了连接用户的提示,如果我有这个错误提示只显示“$”

我试过命令

ksh -n /home/userTest/.profile

我总是在文件的最后一行收到错误

#!/bin/ksh
# ksh example 
if [[$0 = "ksh"]];
then
  bash
  exit $?
fi

if [[$0 = "-ksh"]];
then
  bash --login
  exit $?
fi

export LOGIN=$LOGNAME

#prompt config
PS1="$LOGIN@"$(hostname)":$PWD"

if [["$(id -u)" = "0"]];
then
  export PS1="$PS1# "
else
  export PS1="$PS1> "
fi

#Alias utile
alias ll="ls -la"

#Set any export here
export PATH_EXAMPLE=/home/userTest
export JAVA_HOME=$PATH_EXAMPLE/games/java/current
export PATH=$JAVA_HOME/bin:$PATH
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题 ?

谢谢。

syntax ksh syntax-error

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

避免从仪表板上的管道子壳

我有这个示例代码:

find "$1" ! -regex "$regex" 2>/dev/null | while read line ; do
    a="$line"
done

echo ("$a") # prints nothing because of subshell
Run Code Online (Sandbox Code Playgroud)

我需要:

  • 使子外壳在$a外部(在全局范围内)可见的解决方法
  • 不使用 bash 的进程替换
  • 与 dash、bash 和 korn shell 兼容

我怎样才能做到这一点?有什么简单的解决办法吗?

bash ksh pipe subshell dash-shell

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

在第一次出现的分隔符上拆分字符串/变量 (UNIX)

我想用分隔符分割字符串。变量 my_string 包含 Hello_This_Is_My_string 输出将仅

下面是我的代码:

result = $(echo $my_string |" cut -d '_' -f2")
Run Code Online (Sandbox Code Playgroud)

但是,我得到<Is>而不是<This_Is_My_string>

unix scripting ksh

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

openssl 的脚本/包装器将下载整个证书链,并将每个证书保存到一个单独的文件中?

我已经看到了如下示例,它使用 openssl 下载一个证书,但我正在寻找一个可以下载整个证书链并将每个证书另存为单独文件的示例。理想情况下,最好保存与 CN 名称匹配的每个证书文件。

echo -n | openssl s_client -connect HOST:PORTNUMBER | \
  sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/$SERVERNAME.cert
Run Code Online (Sandbox Code Playgroud)

bash shell scripting ksh openssl

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

SQL*Plus 脚本执行两次

我正在尝试使用 sqlplus 运行脚本。我的脚本是一个简单的删除语句。我通过将以下内容放入我的 ksh 终端来执行它:

sqlplus username/'password' @../sql/delete_societes.sql
Run Code Online (Sandbox Code Playgroud)

../sql/delete_societes.sql 是

DELETE FROM f2020.SOCIETES;
/
Run Code Online (Sandbox Code Playgroud)

出于某种原因,它运行了两次,导致输出“0 行被删除”被打印两次并在我尝试执行插入而不是删除时导致错误。

oracle ksh sqlplus

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

awk $4 列,如果列 = 其后带有字符的值

例如,我有一个包含以下数据的文件:

20        V     70000003d120f88  1                            2
20        V     70000003d120f88  2                            2
20x00     V     70000003d120f88  2                            2
10020     V     70000003d120f88  1                            5
Run Code Online (Sandbox Code Playgroud)

我想获得第 4 列数据的总和。

使用下面的命令,我可以实现这一点,但行 20x00 被排除在外。我想从 20 开始的所有内容都必须求和,而在此之前没有任何内容,例如 20*:

cat testdata.out | awk '{if ($1 == '20') print $4;}' | awk '{s+=$1}END{printf("%.0f\n", s)}'
Run Code Online (Sandbox Code Playgroud)

输出值必须是:

5
Run Code Online (Sandbox Code Playgroud)

我如何使用 awk 实现这一点。我尝试的以下内容也不起作用:

cat testdata.out | awk '$1 ~ /'20'/ {print $4;}' | awk '{s+=$1}END{printf("%.0f\n", s)}' 
Run Code Online (Sandbox Code Playgroud)

unix awk ksh

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

使用KornShell提取文件名的一部分

我有一个文件名,例如:xxdatafile_20110120123030_12342.dat.我想"XXdatafile_"从文件名中提取.

如何在Unix上使用Ksh做到这一点?

unix ksh string-parsing

0
推荐指数
1
解决办法
1728
查看次数

如何在ksh中的某个字符串后提取子字符串?

如果我有这样的字符串:

The important variable=123 the rest is not important.
Run Code Online (Sandbox Code Playgroud)

我想在ksh中提取"123"部分.

到目前为止,我尝试过:

print awk ' {substr($line, 20) }' | read TEMP_VALUE
Run Code Online (Sandbox Code Playgroud)

(这20部分只是暂时的,直到我弄清楚如何提取字符串的起始位置.)

但是,这只是打印awk ' {substr($line, 20) }' | read TEMP_VALUE(虽然这种格式有这样的代码工作:print ${line} | awk '{print $1}' | read SINGLE_FILE).

我错过了一个简单的命令来执行此操作(即其他语言)吗?

运行Solaris 10.

string ksh substring solaris-10

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

如何使用关键字进行字符串分隔?

我有STRING,如下所示.每个键之间没有特定的分隔符.唯一的方法是识别密钥使用关键字"key_1"或"key_2"等.

所有键都以"key_"开头,并且永远不会出现在另一个键的值中:

STRING="key_1=mislanious_string1 key_2=miscellaneous_string2"
Run Code Online (Sandbox Code Playgroud)

我想要输出如下.

echo $STRING1 应该打印:

key_1=mislanious_string1
Run Code Online (Sandbox Code Playgroud)

echo $STRING2 应该打印:

key_2=mislanious_string2
Run Code Online (Sandbox Code Playgroud)

例如:如果STRING ="key_1 = foobarzkey_2 = bash",则输出应该如下:STRING1 = key_1 = foobarz,STRING2 = key_2 = bash.

可能有更多的键,如key_1,key_2,key_3等.每个键以"key_"开头,并且永远不会出现在另一个键的值中:

在UNIX bash shell中怎么做?

unix bash shell ksh

0
推荐指数
1
解决办法
157
查看次数