我正在写一个创建用户帐户的bash脚本.根据特定条件从文件中提取用户名和密码哈希.密码哈希自然包含'$'分隔哈希的字段(例如$ 1 $ {SALT} $ ...).
问题是-p选项useradd需要在密码哈希周围使用单引号,以防止'$'字段作为变量进行插值.传递变量时,为了正确插值,引号需要加倍.单引号将变量视为字符串.
但是,如果我用双引号传递变量,则扩展变量,然后将每个'$'视为一个变量,意味着密码永远不会正确设置.更糟糕的是,有些变量在其中有大括号('{'或'}'),这进一步扼杀了事情.
如何传递这样的值并确保它完全插值而不需要shell修改?
所有内插变量完整的特定代码行示例:
# Determine the customer we are dealing with by extracting the acryonym from the FQDN
CUSTACRO=$(${GREP} "HOST" ${NETCONF} | ${AWK} -F "." '{print $2}')
# Convert Customer acronym to all caps
UCUSTACRO=$(${ECHO} ${CUSTACRO} | ${TR} [:lower:] [:upper:])
# Pull the custadmin account and password string from the cust_admins.txt file
PASSSTRING=$(${GREP} ${CUSTACRO} ${SRCDIR}/cust_admins.txt)
# Split the $PASSSTRING into the custadmin and corresponding password
CUSTADMIN=$(${ECHO} ${PASSSTRING} | ${CUT} -d'=' -f1) …Run Code Online (Sandbox Code Playgroud) 我想弄清楚如何创建一个简单的数据库实例。到目前为止,我只有一个DBSubnetGroup和DBInstance。在这一点上,我已经根据我尝试使用我的模板(在 Designer 中创建)创建堆栈时遇到的错误找出了一些事情。
我现在遇到了一个错误,根据实例类文档,它似乎应该被支持,但我想不是。根据我下面的片段,我应该使用什么?
myDB:
Type: 'AWS::RDS::DBInstance'
Properties:
DBInstanceClass: db.m1.small
DBName: myDB
DBSubnetGroupName: !Ref myDBSubnetGroup
Engine: mysql
EngineVersion: 5.6.41
AllocatedStorage: '100'
MasterUsername: admin
MasterUserPassword: AmazingPassword
Run Code Online (Sandbox Code Playgroud)
实际错误是
RDS does not support creating a DB instance with the following combination: DBInstanceClass=db.m1.small, Engine=mysql, EngineVersion=5.6.41, LicenseModel=general-public-license. For supported combinations of instance class and database engine version, see teh documentation. (Service: AmazonRDS; Status Code: 400; Error Code: InvalidParameterCombination; Request ID: 04a8be38-9368-40e4-b677-1cdc442b3cae
Run Code Online (Sandbox Code Playgroud)
再次,我查看了文档,它说 db.m1.small 支持 MySQL v5.6。也许这已经过时了?我想我可以尝试5.7。
有什么想法吗?
我一直在尝试配置终结器以尊重终端的大小.这可能吗?实际上,每次重新打开终结器时,我都必须将几个终端调整为我想要的配置.
首选项似乎没有配置此选项.它似乎只允许我设置拆分而不是终端大小.
我希望它看起来像:

但这就是我打开终结者时的样子:

每次打开终结者时,我最终都要调整右下角的两个终端的大小.是否可以将调整大小作为配置布局的一部分进行?
有没有更干净的方法
use Sys::Hostname qw(hostname);
my $hostname = hostname();
$hostname =~ s/\.domain//;
Run Code Online (Sandbox Code Playgroud)
基本上,是否可以在不运行两个$hostname分配且不使用其他模块的情况下将主机名剥离为其短名称?
我正在从YAML文件中读取数据(使用YAML qw/LoadFile /).我需要能够读取值并将它们插入到其他文件中.
YAML文件采用以下格式:
---
host:
- name: first_host
interface:
- name: eth0
oldip: 1.2.3.4
newip: 2.3.4.5
oldgw: 1.2.3.1
newgw: 2.3.4.1
- name: eth1
oldip: 1.2.3.4
newip: 2.3.4.5
oldgw: 1.2.3.1
newgw: 2.3.4.1
- name: eth2
oldip: 1.2.3.4
newip: 2.3.4.5
oldgw: 1.2.3.1
newgw: 2.3.4.1
Run Code Online (Sandbox Code Playgroud)
如果我通过Data :: Dumper运行,我得到以下内容($ Data :: Dumper :: Terse已启用):
{
'host' => [
{
'interface' => [
{
'oldgw' => '1.2.3.1',
'newgw' => '2.3.4.1',
'name' => 'eth0',
'newip' => '2.3.4.5',
'oldip' => '1.2.3.4'
},
{
'oldgw' => '1.2.3.1', …Run Code Online (Sandbox Code Playgroud) 我正在尝试确定Rails是否具有每个数据库条目的内置主键ID,或者,如果在运行时rails generate我必须明确定义ID,例如id:integer.到目前为止,我已经遇到了很多帖子,询问如何更改主键行为或如何创建多列索引,但没有说明Rails默认如何处理主键,实际上它确实如此.
如果仅仅是id:integer在运行时使用的问题rails generate还有什么必要来确保将列用作主键吗?我已经看过:primary => true提到但很少解释为什么它包含在任何特定的例子中.通常它是处理上述多列索引的解释的一部分.
我正在尝试完成一项任务,该任务为之前的任务创建一个几乎相同的应用程序.它需要一个名为的应用程序todolists.这与前一个赋值相同,为了能够重新开始,我将以前的赋值重命名为todolists_mod1.然后我发现问题是Spring宝石记录了之前的任务.
我知道我可以禁止Spring使用的DISABLE_SPRING变量.这对我来说似乎有点乏味.
有没有办法我可以强制Spring从缓存中删除以前的赋值应用程序,或者在不卸载gem的情况下完全清除缓存?
继续我昨天问的一个问题,我有一个脚本,它运行三个测试并报告每个测试.
Tom Fenech为我提供了一些简单的代码,应该解决我的问题.但是,它似乎没有按预期工作.
pass=1
[[ test1 ]] || { echo 'test1 failed'; pass=0 }
[[ test2 ]] || { echo 'test2 failed'; pass=0 }
[[ test3 ]] || { echo 'test3 failed'; pass=0 }
[[ $pass -eq 0 ]] && echo 'one of the tests failed'
Run Code Online (Sandbox Code Playgroud)
让我们只使用其中一个测试.假设我有一个变量,我需要将其值与数字进行比较:
[[ ${VAR} == '128' ]] || { echo "test failed"; pass=0 }
Run Code Online (Sandbox Code Playgroud)
这总是会导致错误:
./magic_sysrq.sh: line 64: syntax error near unexpected token `else'
./magic_sysrq.sh: line 64: `else'
Run Code Online (Sandbox Code Playgroud)
对于上下文,脚本包含if...elif...else...fi运行这些测试的块.第一个(if …
bash ×2
perl ×2
amazon-rds ×1
ruby ×1
shell ×1
spring-gem ×1
terminator ×1
variables ×1
yaml ×1