sh相关内容
我有一个脚本可以自动执行需要访问密码保护系统的过程.该系统通过接受用户密码作为参数的命令行程序进行访问. 我想提示用户输入他们的密码,将其分配给一个 shell 变量,然后使用该变量来构建访问程序的命令行(这当然会产生我将处理的流输出). 我是 Bourne/Bash 中相当称职的 shell 程序员,但我不知道如何接受用户输入而不让它回显到终端(或者可能使用“*"字符回显).
..
在 shell 脚本中,如何回显所有调用的 shell 命令并扩展任何变量名称? 例如,给定以下行: ls $DIRNAME 我希望脚本运行命令并显示以下内容 ls/full/path/to/some/dir 目的是保存所有调用的 shell 命令及其参数的日志.也许有更好的方法来生成这样的日志? 解决方案 set -x or set -o xtrace 展开变量并在行前打印
..
我在计算机 1 和计算机 2 上运行 Ubuntu.我在计算机 1 上编译了一个 C++ 程序,我可以使用 ./program_name 从终端执行它.它运行良好. 但是,当我尝试在计算机 2 上执行此操作时,它显示:bash: ./program_name: permission denied 出了什么问题,我该怎么办? 解决方案 chmod u+x program_name
..
下面的代码有什么问题? name='$文件名 |cut -f1 -d'.'' 按原样,我得到文字字符串 $filename |cut -f1 -d'.',但是如果我删除引号,我将一无所获.同时,输入 "test.exe" |cut -f1 -d'.' 在 shell 中给我我想要的输出,test.我已经知道 $filename 已分配正确的值.我想要做的是将没有扩展名的文件名分配给一个变量
..
在 Bash 中,为变量赋值是使用 T=content 完成的,等号前后没有空格. 尽管我在 shell 脚本 PWD=/bin/pwd 中看到了以下内容,在等号的右侧包含一个空格. 它有一个空间的目的是什么? 解决方案 在例子PWD=/bin/pwd中,变量PWD被设置为空字符串在执行命令 /bin/pwd 之前.更改仅对该行生效. 这对于出于运行命令的目的对变量进行临
..
我尝试使用以下语法在 shell 脚本中声明一个布尔变量: 变量=$false变量=$真 这是正确的吗?另外,如果我想更新该变量,我会使用相同的语法吗?最后,以下使用布尔变量作为表达式的语法是否正确? if [ $variable ]如果 [ !$variable ] 解决方案 Revised Answer (Feb 12, 2014) the_world_is_flat=true#
..
我有一个从工作脚本复制的简单 shell 脚本.如果我将其复制粘贴到终端,它会起作用: 如果为真然后真的菲 但是,当我使用 bash myscript 运行脚本时,我收到各种语法错误,好像缺少某些关键字一样. myscript:第 4 行:意外标记“fi"附近的语法错误,就好像 then 不存在一样. myscript:第 6 行:语法错误:文件意外结束,就好像 fi 不存在一样.
..
我正在尝试在 bash heredoc 中插入变量: var=$1sudo tee "/path/to/outfile" >/dev/null /path/to/outfile 不起作用
..
bash中有两种捕获命令行输出的方法: 旧版 Bourne shell 反引号 ``: var=`command` $() 语法(据我所知是 Bash 特定的,或者至少不受像原始 Bourne 这样的非 POSIX 旧 shell 的支持) var=$(command) 与反引号相比,使用第二种语法有什么好处吗?还是两者完全 100% 等价? 解决方案 主要的是能够嵌套它们,
..
我有一行代码在我的终端中运行良好: for i in *.mp4;做 echo ffmpeg -i "$i";“${i/.mp4/.mp3}";完毕 然后我将完全相同的代码行放在脚本 myscript.sh 中: #!/bin/sh对于 *.mp4 中的 i;做 echo ffmpeg -i "$i";“${i/.mp4/.mp3}";完毕 但是,现在我在运行它时出现错误: $ sh m
..
我在向 Bash 脚本中的命令传递参数时遇到问题. poc.sh: #!/bin/bashARGS='“你好"测试'./swap ${ARGS} 交换: #!/bin/sh回声“${2}"“${1}" 当前输出为: 那里" "你好 仅更改 poc.sh(因为我相信交换可以正确执行我想要的操作),如何让 poc.sh 传递“hi there"并作为两个参数进行测试,“hi ther
..
我看到 这里 测试是否 $?是零(成功)还是其他(失败)是一种反模式,但我在其他任何地方都找不到. 坚持维基百科的反模式定义:“一个反模式模式(或反模式)是对反复出现的问题的常见反应,通常是无效的,并且有可能适得其反."为什么这是一种反模式? 解决方案 这是一种反模式,因为它引入了复杂性,如果您根本不需要记录退出状态就不会存在. if your_command;然后 ... 出错
..
要将命令的输出作为变量存储在 sh/ksh/bash 中,您可以执行以下任一操作 var=$(command) 或 var=`command` 这两种方法有什么区别? 解决方案 反引号/墓碑已被弃用,取而代之的是 $() 用于命令替换,因为 $() 可以像 $(echo foo$(echo bar)) 一样轻松地嵌套在自身中.还有其他差异,例如反斜杠在反引号/gravemark 版
..
我有一个带有命令的 shell 脚本,看起来它应该可以工作,但它失败了,并显示奇怪的包装/截断/损坏的错误消息.示例: $ ls -l myfile-rw-r----- 1 me me 0 Aug 7 12:36 myfile$猫我的脚本ls -l 我的文件$ bash 脚本: 无此文件或目录 该文件显然存在,但即使我不存在,这也是我通常会收到的那种错误消息: $ ls -l idontex
..
我有一个脚本,我需要在其中启动一个命令,然后将一些附加命令作为命令传递给该命令.我试过了 suecho 我现在应该是 root:我是谁出口回声完成. ...但它不起作用:su 成功,但是命令提示符只是盯着我看.如果我在提示符下输入 exit,echo 和 who am i 等开始执行!并且 echo done. 根本没有被执行. 同样地,我需要让它通过 ssh 工作: ssh 远程主机
..
在下面的程序中,如果我在第一个 if 语句中将变量 $foo 设置为值 1,它的工作原理是它的值在之后被记住if 语句.但是,当我在 while 语句内的 if 中将相同的变量设置为值 2 时,它会在 while 循环之后被遗忘.它的行为就像我在 while 循环中使用了变量 $foo 的某种副本,而我只修改了那个特定的副本.这是一个完整的测试程序: #!/bin/bash设置 -e设置 -u富
..
在编写shell程序时,我们经常使用/bin/sh和/bin/bash.我通常使用bash,但我不知道它们之间有什么区别. Bash 和 sh 的主要区别是什么? 使用 Bash 和 sh 编程时需要注意什么? 解决方案 sh 是什么? sh(或 Shell 命令语言)是一种由 POSIX 标准.它有许多实现(ksh88、Dash,……).Bash 也可以被认为是 sh
..
我有一个名为 test.sh 的脚本: #!/bin/bashSTR = "你好世界"回声$STR 当我运行 sh test.sh 我得到这个: test.sh: line 2: STR: command not found 我做错了什么?我在网上查看非常基本/初学者的 bash 脚本教程,这就是他们所说的声明变量的方式......所以我不确定我做错了什么. 我使用的是 Ubuntu
..
以下是一系列情况,其中 echo $var 可以显示与刚刚分配的值不同的值.无论分配的值是“双引号"、“单引号"还是不带引号,都会发生这种情况. 如何让 shell 正确设置我的变量? 星号 预期的输出是 /* Foobar is free software */,但我得到了一个文件名列表: $ var="/* Foobar 是免费软件 */"$回声 $var/bin/boot
..
我正在 Mac 上制作 NW.js 应用程序,并希望通过双击图标在开发模式下运行该应用程序.第一步,我试图让我的 shell 脚本工作. 在 Windows 上使用 VSCode(我想争取时间),我在项目的根目录下创建了一个 run-nw 文件,其中包含: #!/bin/bashcd "src"安装光盘.../tools/nwjs-sdk-v0.17.3-osx-x64/nwjs.app/
..