簡體   English   中英

將 shell 腳本變量設置為命令的輸出

[英]Set shell script Variable to output of command

我試圖將 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 也是相同的。

這可以作為其他人遇到此問題的解決方案

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

你的腳本:

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

這有幾個問題:

  1. -n不是管道中的有效命令-n $var1 | md5sum -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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM