【问题标题】:Set shell script Variable to output of command将 shell script 变量设置为命令的输出
【发布时间】:2016-07-28 16:17:27
【问题描述】:

我试图 cd 进入脚本中设置的任何变量的 md5 哈希,但我没有得到正确的 md5 值,我认为这与我声明变量的方式有关。感谢您的帮助!

#!/bin/bash
var1=$1
md5=$(-n $var1 | md5sum)
cd /var/www/html/$md5

我希望它会带我到 md5 哈希给出的目录:

$ ./myscript hello
(no output)
$ pwd
/var/www/html/5d41402abc4b2a76b9719d911017c592

相反,它给了我错误并尝试cd 到错误的路径:

$ ./myscript hello
./myscript: line 3: -n: command not found
./myscript: line 4: cd: /var/www/html/d41d8cd98f00b204e9800998ecf8427e: No such file or directory
$ pwd
/home/me

无论我输入哪个值,它错误地尝试 cd 到的 md5sum 也是相同的。

【问题讨论】:

  • 你在那个变量中得到了什么?
  • 无论我传入什么变量,它每次都会输出相同的 md5 哈希
  • 以前创建过md5sum的文件夹吗?即对于您所有的有效输入参数,是否存在具有其哈希值的目标文件夹?
  • 是的,文件夹已经创建了
  • 顺便说一句,Google 搜索“d41d8cd98f00b204e9800998ecf8427e”确认这是您在计算空文件的 MD5 校验和时得到的结果(例如,在类 Unix 系统上为 /dev/null),或者当没有标准输入上的输入等。由于失败的-n 命令不产生任何输出,md5sum 命令没有输入并且每次都输出相同的散列。

标签: linux bash shell


【解决方案1】:

这可以作为其他人遇到此问题的解决方案

#!/bin/bash
md5=$*
hash="$(echo -n "$md5" | md5sum )"
cd /var/www/html/$hash

【讨论】:

  • 这不会导航到哈希目录名称路径,因为脚本是在未反映的子 shell 上执行的。参考我上面的答案!
  • @Inian 你所要做的就是“.md5 名称”
  • 我不确定这是什么意思!
  • @Inian 当你“。”或“源”在运行 shell 脚本之前,你不必担心它只会在子 shell 中执行
  • 啊!你是那个意思!说得通!如果有帮助,也请查看我的答案
【解决方案2】:

你的脚本:

#!/bin/bash
var1=$1
md5=$(-n $var1 | md5sum)
cd /var/www/html/$md5

这有几个问题:

  1. -n 不是管道 -n $var1 | md5sum 中的有效命令。
  2. md5sum 不仅仅返回 MD5 摘要。
  3. 在脚本中更改目录不会反映在调用 shell 中。
  4. 输入未加引号。

我会为此编写一个 shell 函数,而不是脚本:

function md5cd {
  dir="$( printf "%s" "$1" | md5sum - | cut -d ' ' -f 1 )"
  cd /var/www/html/"$dir" || return 1
}

该函数使用md5sum 计算给定字符串的MD5 摘要并截断作为输出一部分的文件名(-)。然后它将目录更改为指定位置。如果目标目录不存在,它会通过返回非零退出状态来发出信号。

将其扩展到cd 到从命令行上的路径构造的路径,但最后一个路径元素更改为 MD5 摘要(只是为了好玩):

function md5cd {
  word="${1##*/}"

  if [[ "$word" == "$1" ]]; then
    prefix="."
  else
    prefix="${1%/*}"
  fi

  dir="$( cut -d ' ' -f 1 <( printf "%s" "$word" | md5sum - ) )"
  cd "$prefix"/"$dir" || return 1
}

测试它:

$ pwd
/home/myself

$ echo -n "hex this" | md5sum
990c0fc93296f9eed6651729c1c726d4  -

$ mkdir /tmp/990c0fc93296f9eed6651729c1c726d4

$ md5cd /tmp/"hex this"

$ pwd
/tmp/990c0fc93296f9eed6651729c1c726d4

【讨论】:

    猜你喜欢
    • 2014-05-26
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 2020-12-19
    • 2022-09-27
    • 1970-01-01
    相关资源
    最近更新 更多