web-dev-qa-db-ja.com

ln:無効なオプション-'/'

lnの状況があり、lnについて助けを読んだ後でもこれを解決できません。

次のコマンドを実行します。

ln -sf  /lib/modules/$kernel_version/extra/mISDN_core.ko /lib/modules/$kernel_version/kernel/drivers/isdn/mISDN/mISDN_core.ko

次のエラーを提供します。

ln: invalid option -- '/'

どうすれば解決できますか?

2

$kernel_version変数を実際の値に置き換えることをお勧めします。

以下に説明するように、single quoteの代わりにbacktickで以下のコマンドを使用すると、問題も解決するはずです:

$ kernel_version=`uname -r`

@steeldriverで述べたように、エラーはuname -rコマンドを囲むbacktickの代わりにsingle quoteを使用しているためと思われます。

したがって、次のサンプルコマンド:

$ kernel_version='uname -r'
$ ln -sf /tmp/test/$kernel_version/example /tmp/newname
ln: invalid option -- '/'
Try 'ln --help' for more information.

に翻訳されます:

$ ln -sf /tmp/test/uname -r/example /tmp/newname
ln: invalid option -- '/'
Try 'ln --help' for more information.

そして、@ steeldriverが書いたように:おそらく、エラーメッセージは無効なオプション'/'についてです。なぜなら、-rlnコマンドの有効なオプションだからです

backtickを使用するとエラーなしで機能することに注意してください。

$ kernel_version=`uname -r`
$ ln -sf /tmp/test/$kernel_version/example /tmp/newname
$ 
$ ls -l /tmp/newname 
lrwxrwxrwx 1 user user 35 Feb 21 16:02 /tmp/newname -> /tmp/test/4.4.0-112-generic/example
6
Yaron
  1. コマンドの置換には、古いスタイルのバックティック`...`の代わりに$( ... )表記を使用します。見た目も良く、巣も良くなっています。また、引用符と混同される可能性が低くなります。

  2. 変数を引用します。 uname -rの文字列kernel_versionを使用すると、/lib/modules/$kernel_version/extra/mISDN_core.koは2つの単語/lib/modules/uname-r/extra/mISDN_core.koに展開されます。明らかに1つのファイル名だけが必要な場合。

    引用符で囲まれた"/lib/modules/$kernel_version/extra/mISDN_core.ko"は、単一のWordとして/lib/modules/uname -r/extra/mISDN_core.koに展開されますが、その名前のファイルが存在しないため、lnからエラーが発生します。

  3. ファイル名はスラッシュで始まるため、変数を適切に引用した場合は必ずしも必要ではありませんが、一般的にはオプションの終わりを示す二重ダッシュ--を追加することを検討できます。ファイル名がダッシュで始まる場合は、オプションとファイル名の違いをアプリケーションが認識できるように使用する必要があります。

    古典的な例として、rm *というファイルを含むディレクトリで-rfを実行するとどうなるかを考えてください。 rm -- *は問題を防ぎます(rm ./*と同様)。

(1)または(2)を実行しないと、lnは文字列-r/kernel...を引数の1つとして、またGNU lnはすべての引数からオプションを読み取り、最初のものだけでなく、-rは既知のオプションとして使用され、/は既知のオプションではないため、-/でエラーが発生します。

だから、あなたがすべきことは全部です:

kernel_version=$(uname -r)
ln -sf -- "/lib/modules/$kernel_version/extra/mISDN_core.ko" \
    "/lib/modules/$kernel_version/kernel/drivers/isdn/mISDN/mISDN_core.ko"
0
ilkkachu