タグ付けされた質問 「shell」

シェルは、Unixのコマンドラインインターフェイスです。シェルにインタラクティブにコマンドを入力するか、スクリプトを記述してタスクを自動化できます。/ bin / shおよび最も互換性のあるシェル(ash、bash、ksh、zshなど)に適用される質問には、このタグを使用します。エラーのあるシェルスクリプトについては、ここに投稿する前にhttp://shellcheck.netで確認してください。

1
ルートシェルはpipを認識しますが、sudo pipは「コマンドが見つかりません」
私はpython 2.7.8をインストールmakeしmake install、次にget-pipを介してpipをインストールしました。私が経由して設定したプロキシの背後で作業していることに注意する必要があります http_proxy ftp_proxy https_proxy に 私のユーザーの ~/.zshrc ルーツ /root/.basrc 今、私は走ることができます pip 私のユーザーアカウント rootアカウント しかし、sudoを使用してユーザーのシェルから実行することはできません sudo pip sudo: pip: command not found ここで何が問題になっていますか?

5
テキストの検索後に特定の行を読み取る方法は?
テキストを見つけた後、特定の行数を読み取るにはどうすればよいですか? 例えば。: 「Unix」が見つかったら、次の2行を読みます。 Test 1 Test 2 Test 3 Test 4 UNIX Test 5 Test 6 Test 7 Test 8 Test 9 結果は次のようになります。 Test 5 Test 6 注:最後の例の「Unix」は引数なので、他のテキストでもかまいません。 私が持っているもの: 私はまだアイデアが足りないので、ただ光が必要です。それを行う別のスクリプトを作成することを考えてください。
12 bash  shell 

5
シェルコマンドの出力の文字数
コマンドの出力の文字数を1ステップで計算する必要があるスクリプトを書いています。 たとえば、コマンドの出力は10文字なので、コマンドを使用するreadlink -f /etc/fstabと戻り10ます。 これは、次のコードを使用して、格納された変数ですでに可能です。 variable="somestring"; echo ${#variable}; # 10 残念ながら、コマンドで生成された文字列で同じ数式を使用しても機能しません。 ${#(readlink -f /etc/fstab)}; # bash: ${#(readlink -f /etc/fstab)}: bad substitution 私は最初に出力を変数に保存することでこれを行うことが可能であることを理解しています: variable=$(readlink -f /etc/fstab); echo ${#variable}; しかし、私は余分なステップを削除したいと思います。 これは可能ですか?組み込みまたは標準のユーティリティのみを使用したAlmquistシェル(sh)との互換性が推奨されます。
12 shell  string  variable 

3
bashの条件式の-aと-eの違いは何ですか?
からman bash: CONDITIONAL EXPRESSIONS [...] -a file True if file exists. [...] -e file True if file exists. だから、何の違いである[ -a $FILE ]とは、[ -e $FILE ]任意の場合は、? 実際の違いがない場合、同じ目的で2つのフラグが存在するのはなぜですか?
12 bash  shell  test 

3
リンクでリンクされたディレクトリに移動する
Iときcdリンクは、私の現在のパスではなく、へのリンクリンクディレクトリのパスよりも、リンクのパスが付いています。例えば ~/dirlinks/maths$ ls -l logic lrwxrwxrwx 1 tim tim 71 Jul 27 10:24 logic -> /windows-d/academic discipline/study objects/areas/formal systems/logic ~/dirlinks/maths$ cd logic ~/dirlinks/maths/logic$ pwd /home/tim/dirlinks/maths/logic ~/dirlinks/maths/logic$ cd .. ~/dirlinks/maths$ 現在のパスをリンクされたディレクトリのパスに変更して、リンクされたディレクトリの親ディレクトリも操作できるようにしたいと考えています。lsリンクされたディレクトリを見つけてそこcdに移動するリンクのほかに、それを達成するためのいくつかの簡単な方法は何ですか?たとえばcd、リンクに入った後、現在のパスをリンクされたディレクトリのパスにどのように変更しますか?

7
エコー前のタイムスタンプ
echo?の前にタイムスタンプを作成するより良い方法が存在します。 現在私はこのようにしています: #!/bin/sh if mount | grep -q /mnt/usb; then echo `date +%R\ ` "usb device already mounted" else echo `date +%R\ ` "mounting usb device..." mount -t msdosfs /dev/da0s1 /mnt/usb if mount | grep -q /mnt/usb; then echo `date +%R\ ` "usb device successfully mounted" fi fi 出力は次のようになります。 10:36 …
12 shell  timestamps  echo 


4
バックグラウンドで複数のnohupコマンドを実行する
2つのコマンドcmd1とcmd2を取得しました。2つのうち、cmd2の完了には時間がかかります。cmd2を実行してからcmd1を実行する必要があります。 次の方法でそれらを実行しようとしました: bash$ (nohup ./cmd2>result2 &) && nohup ./cmd1>result1 & または bash$ (nohup ./cmd2>result2 &) ; nohup ./cmd1>result1 & しかし、どちらの場合も、cmd1はcmd2が完了するのを待っておらず、result1がいっぱいになっていることがわかります。 両方をnohupプロセスにし、バックグラウンドで実行する必要があるときに、cmd1をcmd2の後に実行する方法は?

3
システムパッケージマネージャーの識別
デフォルトのシステムパッケージマネージャーを(スクリプトから)識別する方法はありますか? 明確にするために、私がやりたいことは、与えられたコマンドを実行することであり、Debianまたはその派生物では「apt」のようなものを返し、openSUSEでは「zypp」を返し、Fedoraなどではそれを返します。 「yum」、Arch Linuxでは「pacman」などを返します。 私は次のようなものでこれを行うことができることを知っています、同じ名前の実行可能ファイルがあるとすぐに壊れないより堅牢な方法があるかどうか疑問に思いました。 which apt >/dev/null 2>&1 if [ $? -eq 0 ] then echo "apt" fi # etc...


4
ディレクトリツリー全体を小文字の名前に変更する
私はウェブサイトの変換に取り組んでいます。リンクされ、Webサーバーから提供されるファイルは、大文字と小文字が区別されません。しかし、私は自分のLinuxシステムにサイトのダンプを作成し、データを移行するためのスクリプトを書いています。問題は、ページのリンク文字列とファイルシステムの実際の大文字と小文字の区別の問題に遭遇していることです。 たとえば<a href='/subfolder/PageName.asp'>、実際のファイルがのように、ページにリンクが含まれている場合があります/subfolder/pagename.asp。同様に画像の場合- <img src='spacer_sm.gif'>かもしれませんSpacer_Sm.gif。 だから私の考えは、すべてのディレクトリとファイル名を、サイトのダウンロード用に小文字の同等のものに変更することです。これを行うにはどうすればよいですか(もっと良い方法があるでしょうか?) 大文字と小文字を区別しないスイッチがあるUNIXコマンドがある場合でも、私はphpを使用しているため、すべてのファイルシステムコマンドに大文字と小文字を区別するオプションがあるわけではありません。

4
空行のzshタブ補完
見つけられなかったtcsh'ismが欲しい:内容のない空白行で、タブキーを押してlsに相当するものを見たい。それは私が欲しいと言うことです $ <tab> 他のことをしてから\ tをくれ。コマンド補完のための素晴らしいリソースは見つかりましたが、この基本的なケースでは見つかりませんでした。これに関するどんな助けも素晴らしいです!ありがとう。

3
リダイレクトせずにファイルに書き込みますか?
特別なファイルを作成し、それに魔法のクッキーを書き込む必要がある通常のコンパイル済みアプリケーションを書いています。アプリケーションから直接ファイルを書き込むことはできません。システムセキュリティモデルでは、トリックを実行するために昇格された特権でヘルパーツールを起動する必要があります。ヘルパーツールに任意の数の引数を指定できます。次に、ヘルパーツールとして機能し、ファイルを作成する非常に単純なシステムコマンドを選択します。このようなもの: /bin/sh -c "/bin/echo -n 'magic' > /some/where/file" Simple touchは、Cookieをファイルに書き込む必要があるため、カットしません。echoシェルラッパーなしのSimple は、ファイルを書き込むためにリダイレクトが必要なため機能しません。そのような些細なタスクを実行するためにroot特権でシェルを呼び出すのは快適ではありません。ファイルを書き込むために呼び出すことができる本当にシンプルで制約のあるシステムコマンドはありますか?

3
ashにbashスタイルの配列に移植する方法は?
少し前に、bashスクリプトを記述しましたが、これはを使用して環境で実行できるはずashです。 でbash、それはのようでした。 services=( "service1.service" "service2.service" "service3.service" ) for service in "${services[@]}" do START $service done START() { echo "Starting "$1 systemctl start $1 } 実際には40ほどのサービスが並んでいますが、この移行をできるだけ簡単でクリーンなものにしたいと考えています。bashisms を常に使用しています。今、私はスクリプトをよりポータブルにするタスクに困っています。 移植性の理由から、おそらく純粋なash解決策があればいいでしょう。しかし、私はbusybox自分の自由にかなり頑強なので、移植性を犠牲にするかもしれません。「クリーン」スクリプトもメトリックであるため、読みやすさが大幅に向上する場合にのみ。 この場合、ポータブルでクリーンなソリューションは何でしょうか?
12 bash  shell  array  ash 

2
chshコマンドでシェルを変更できないのはなぜですか?
このコマンド:chshは説明したように動作しないため、少なくとも新しいコマンドを学びました。 次のように機能すると説明されています。 cat /etc/shells 知っておくべきことは、どのシェルがインストールされているかを知るためです。 echo $SHELLあなたが使用しているシェルを知るために行います。 シェルの1つを選択して入力 chsh -s /path/to/shell パスワードを入力echo $SHELLし、新しいシェルにいることを確認します。 これを実行しましたが、パスワードの入力時にエラーメッセージは表示されませんでしたが、同じシェルにいました。 % echo $SHELL /bin/bash % cat /etc/shells # /etc/shells: valid login shells /bin/sh /bin/dash /bin/bash /bin/rbash % chsh -s /bin/sh Password: % echo $SHELL /bin/bash

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.