bashスクリプトを使用して学習しようとしています。YouTubeのfreeCodeCamp初心者チュートリアル。
彼がどのように関数を作るかを示す部分で詰まった。彼は変数のオプションと一緒にコマンドを保存します。
#!/bin/bash
showuptime(){
up=$(uptime -p | cut -c4-)
since=$(uptime -s)
cat << EOF
----------
This machine has been up for ${up}
It has been running since ${since}
----------
EOF
}
showuptime
端末からzshを使用してMacBook M1にコピーすることはできません。
私は使用中で、#!/bin/zsh
-pと-sオプションを渡さない場合にのみ機能します。
間違い:
uptime: illegal option -- p
usage: uptime
uptime: illegal option -- s
usage: uptime
答え1
いくつかを明確にするには:
- 変数として~のなどを介してアクセスできる関数に渡された引数(ここにはありません)を持つ関数を表示することをお勧めします
$1
。$2
- あなたが持っているすべては変数です存在するタグ付けされていないため、
local
その機能に限定されません。 - この
$( )
構造はコマンドの置き換え。何らかの方法でコマンドを保存せずにその中の内容を実行し(uptime -p | cut -c4-
最初の場合)、コマンドによって生成された出力を変数に割り当てます。uptime
この時点でコマンドが実行されます。コマンド以外のコマンド出力が保存されます。 - Marcusが述べたように、エラーは
uptime
これらのオプションをサポートしていないコマンドで発生します。 Mac OSはBSDに関連しているので、FreeBSDはマニュアルページuptime
方向を示すことができます。 FreeBSDではuptime
オプションはまったく許可されておらず、Mac OSでも同様です。 - 質問のタイトルに答える:オプションでコマンドを保存する最善の方法は、配列を使用することです。
my_stored_command=(ls -lt --human-readable /home)
その後、後で実行して"${my_stored_command[@]}"
配列を個々の要素に拡張し、コマンド呼び出しを再設定できます。