私は:GNU bash、バージョン4.4.12(1)-release(x86_64-pc-linux-gnu)
スクリプトは次のとおりです:(note.sh)
#! /bin/bash
edit="edit"
if [[ $edit = $1 ]]
then
touch ~/.notes/"$2".txt
$EDITOR ~/.notes/"$2".txt
else
tree ~/.notes
fi
Bashに入力することを望んでいました:./note.sh
私はtree ~/.notes
を入力したかのように出力を取得しますが、このスクリプトに基本的に引数を受け入れたいので、./note.sh edit new_note
を入力した場合、new_note.txtが存在しない場合、touch ~/.notes/new_note.txt
ターミナルで編集のためにnew_note.txtを開くテキストエディター
elseステートメントは機能しますが、./note.sh edit new_note
は戻ります
./note.sh: line 10: /home/username/.notes/testnote.txt: Permission denied
タッチは行いますが、エディターは行いません。ここで許可が拒否されているのは何ですか?
前もって感謝します!私はシェルスクリプトとaskubuntuの両方に非常に慣れていないので、助けていただければ幸いです
Bashでは、変数$EDITOR
はデフォルトでは設定されていません。ただし、デフォルトのエディターを呼び出すコマンドがあります。
このコマンドの場合:
editor <filename>
コマンドを選択に設定するには:
Sudo update-alternatives --config editor
例:
terrance@terrance-ubuntu:~$ Sudo update-alternatives --config editor
There are 3 choices for the alternative editor (providing /usr/bin/editor).
Selection Path Priority Status
------------------------------------------------------------
0 /bin/nano 40 auto mode
1 /bin/ed -100 manual mode
2 /bin/nano 40 manual mode
* 3 /usr/bin/vim.tiny 10 manual mode
Press <enter> to keep the current choice[*], or type selection number:
デフォルトのエディターを選択した後、スクリプトで呼び出すために必要な作業は次のとおりです。
editor ~/.notes/"$2".txt
お役に立てれば!
$EDITOR
変数は設定されていないため、その行に到達すると空白になります。 bash
の~/.notes/"$2".txt
を残して呼び出します。
そのため、bash
は/home/username/.notes/testnote.txt
を実行しようとします。これは、ファイルに実行可能フラグが設定されていないため、permission deniedになります。
Terranceが既に述べたように、コマンドeditor
を直接呼び出すか、有効なテキストエディターを変数$EDITOR
に割り当てます。
EDITOR="/usr/bin/vi"
または
EDITOR="/usr/bin/vim"
または
EDITOR="/bin/nano"
または選択した他のエディター。
簡単に:Debian/Ubuntuの場合:sensible-editor
を実行します。
しかし、表示されるエラーについて:
他の人が述べたように、EDITOR
が空であるか設定されていない場合、$EDITOR
の引用符なしの展開は何も生じません。
quoted展開"$EDITOR"
は空のWordになり、シェルがコマンドとして空の文字列を実行しようとすると、混乱を招くエラーが発生します。
bash: : command not found
EDITOR
が設定されていない場合に、おそらくフォールバックを設定する必要があります。そのために${par:-Word}
拡張を使用できます。例えば。 "${EDITOR:-vi}"
はEDITOR
の値を使用し、空または未設定の場合はvi
にフォールバックします。
次に、VISUAL
もあります。これはほとんど同じ機能を提供するため、両方を確認できます:"${VISUAL:-${EDITOR:-vi}}"
。
buntuおよび他のDebianベースのシステムでは、sensible-editor
を使用する必要があります(editor
、vi
またはnano
の代わりに)ユーザーごとにを許可しているためデフォルトエディターの設定、update-alternatives
によって設定されるシステム全体のシンボリックリンクに依存するeditor
とは異なります。
sensible-editor
はVISUAL
とEDITOR
もチェックするため、それらを明示的にチェックする必要はありませんが、sensible-editor $file
を実行するだけで適切に処理されます。
(たとえあなたのシステムがシングルユーザーシステムであっても、マルチユーザーシステムが存在し、デスクトップマシン上でも複数のユーザーを持つことができることに留意してください。)